Scala в експертній перевірці Чому саме Scala, а не Java

У тематичному досьє Scala ми досліджуємо питання про те, де в даний час знаходиться популярна мова JVM і куди вона спрямована. У експертній перевірці шість досвідчених розробників Scala дають нам свій погляд на Scala. Частина 1 стосується питання, що робить Scala настільки захоплюючим, і що насправді Scala має попереду Java.
Коментуйте і перемагайте!
Обговоріть з! Серед усіх конструктивних коментарів щодо експертної перевірки Scala Ми даруємо три примірники книги "Початок роботи зі Скалою" Хайко Зебергер.
Ваша думка враховує!
Чому ви розробник Scala? Що це за мова, яка вас особисто зачаровує?
Хайко Зебергер: Що мене особливо цікавить у Scala, так це те, що - як і в деяких інших мовах - ви можете писати короткий і зрозумілий код одночасно. Це найкраще видно в класах випадків, які представляють незмінні об'єкти значень із “вбудованими” реалізаціями equals та відповідності hashCode та pattern - квазі “увімкнення стероїдів”. Akka використовує ці функції, щоб визначити, як актор реагує на повідомлення:
Якби вам потрібно було реалізувати цей приклад на Java, вам довелося б писати багаторядкові класи з полями, геттерами і, перш за все, з реалізаціями для equals та hashCode замість однорядкових класів регістрів. І замість зіставлення зразків вам доведеться працювати з примірниками instanceof і type. Навіть якщо сучасні IDE полегшують частину роботи, отриманий код залишається набагато розширенішим і незрозумілішим, а на Java фокус не такий різкий на фактичному "що".
Експерти Scala
Хейко Зебергер: співробітник кодецентричного. Автор книги "Початок роботи зі Scala." @Hseeberger
Джуліан Турне: технічний директор на @mfg_labs та автор jto/validation
Даніела Сфрегола: блогер і технічний лідер в PayTouch. @DanielaSfregola
Іван Кусаліч: інженер-програміст ТУТ. Організатор зустрічі з майстерністю майстерності в Берліні, SoCraTes. @ikusalic
Даніель Вестхайде: консультант innoQ. Автор "Посібника Неофіта по Скалі". @Kaffeecoder
Маркус Хаук: ІТ-консультант та тренер Scala в кодецентриці.
Даніель Вестхайде: Спочатку мене цікавила Scala, оскільки я вже почав програмувати на Java у дещо більш функціональному стилі, але в якийсь момент я більше не хотів використовувати шаблон, необхідний для цього. Що мене особливо зачаровує в Scala, це потужна система типу, яка навряд чи існує жодною мовою, яка є загальноприйнятою.
Два цікаві приклади: Наприклад, за допомогою вищих типів і типів класів, я можу абстрагуватися через RDD Spark (колекція, розподілена на декількох комп’ютерах у кластері) та колекції Scala - моя логіка програми тоді не знає, чи я запустіть його в кластері Spark на RDD або локально на машині на невеликій колекції Scala. Так звані фантомні типи дозволяють мені переконатися під час компіляції, що я випадково не запишу доступ до своєї бази даних підчинених читань.
Іван Кусаліч: Scala - чудова мова програмування, яка особливо підходить для внутрішньої обробки в корпоративних середовищах. Мені найбільше подобається безліч підтримуваних стилів програмування: я віддаю перевагу поєднанню функціонального та об’єктно-орієнтованого програмування, в якому функціональний підхід забезпечує незмінність і потік процесів, тоді як об’єктно-орієнтований підхід забезпечує хорошу інкапсуляцію даних.
Scala - дуже виразна мова і справжнє задоволення від роботи. Це дозволяє створювати гнучкі та безпечні конструкції, які просто неможливі багатьма іншими мовами. Від простих DSL до класів типу або навіть макросів, якщо вони вам потрібні. Здебільшого, робота зі Scala здається, що я можу перекласти свої думки безпосередньо в код, не мучачись ніякими незграбними та тривалими перекладами.
І тоді, звичайно, є хлопці! Я справді вже не уявляю, як працювати з мовою, яка не має виразних типів. І останнє, але не менш важливе, слід згадати красу особливостей, які будуються одна на одній. Насправді той факт, що перед вами є класи типу перед вами як шаблон дизайну, а не як вбудована функція, говорить про все.
Маркус Хак: Scala мене зачаровує, оскільки поєднує функціональне програмування на JVM із системою виразного типу. Взаємодія з Java - ще один бонус, особливо коли йдеться про поступовий перехід із вирощеної бази коду в Java на Scala.
Даніела Сфрегола: У попередньому житті я був розробником Java. Мені дуже сподобалось працювати з мовою. Але через кілька років розробки я захотів спробувати більш гнучку та виразну мову, саме тому я вирішив трохи пограти із Scala. На той час це ще була одна з блискучих нових мов, з якою грали круті діти.
Я ніколи не повертався з подорожі. На мій погляд, Scala - це захоплююча і потужна мова, яка дозволяє програмісту вирішувати, як повинен виглядати код. Для інших мов це рішення, швидше за все, буде прийнято мовним синтаксисом.
Жюльєн Турне: Близько 2009 року я почав гратись із Scala. Основною причиною цього були лямбди, яких я дуже сумував на Java. На той час я працював в одній компанії з Гійомом Бортом, який розробляв Play Framework. Гійом та решта компанії зацікавилися Scala через кілька місяців. Я скористався можливістю професійно користуватися мовою і затримався на ній.
Оскільки я краще ладнав із Scala, речі, які мені подобаються в мові, сильно змінилися. Спочатку лямбди просто почувались добре. Я багато зробив у JavaScript, і це може звучати як парадокс, але Scala відчував себе ближчим до JavaScript, ніж Java. Потім я дізнався про це трохи більше, відкрив класи класів, потім чисто функціональне програмування, теорію категорій, програмування на рівні типу, логіку, теорію мови програмування - і я все ще навчаюсь!
Що мені особливо подобається у Scala - це подорож. Мова не просто допомагає писати кращі програми. Scala та її спільнота можуть гарантувати, що ви зростете як розробник. Починається з найпростіших проблем («Java занадто балакуча», «Я хочу лямбда», «Я хочу використовувати Spark»), і чим далі ви вникаєте в мову, тим більше ви стикаєтесь із цілим світом нових концепцій. Є не просто нові бібліотеки чи інструменти, а абсолютно нові ідеї. Спочатку це здається абсолютно переважним, але через деякий час ви отримуєте задоволення від навчання.
Чому саме Scala, а не Java?
Даніель Вестхайде: На додаток до набагато потужнішої системи типу, є ще ряд причин, чому я взагалі віддаю перевагу Scala. Два, які я хотів би виділити в цей момент і які певною мірою пов’язані між собою, - це, з одного боку, можливість визначення алгебраїчних типів даних, а з іншого - узгодження шаблонів для роботи з цими типами даних за допомогою легко читабельного коду.
У наступному прикладі коду ми бачимо обидва дії: Ми визначаємо алгебраїчний тип даних, який називається Session, і розмежовуємо сеанс зареєстрованого користувача та анонімний сеанс. Потім ми використовуємо відповідність шаблонів, щоб повернути персоналізовані або загальні рекомендації:
Даніела Сфрегола: Хоча Java збирається скористатися перевагами більш функціонального стилю, Scala має деякі функції, яких Java (поки що) не має, і набагато компактніший синтаксис. Це робить програмування з Scala набагато цікавішим та продуктивнішим, ніж з Java - хоча я повинен визнати, що навчитися Scala важче.
Іван Кусаліч: Надійність типу, виразність, лаконічність, функціональна парадигма, можливості абстракції тощо говорять про Scala. Суть в тому, що Java і Scala - це просто дві дуже різні мови. Scala - це набагато більше, ніж Java, і для того, щоб визначити всі ці точки, потрібні години.
Звичайно, у Scala є і недоліки: вища складність та крута крива навчання. І ринок праці. Швидкість можна було б обговорити, але я вважаю, що біт коду, який дійсно потрібно доопрацювати, не пропорційний читабельності. Крім того, якщо ви сумніваєтесь, ви можете написати це безпосередньо на Java, якщо оптимізація дійсно необхідна. Але ринок праці - це справді великий мінус у порівнянні з Java. З усім іншим, Scala виграє - і в основному велика.
Маркус Хак: Через систему типу Scala. Java має кілька серйозних недоліків, і на практиці набір тексту, як правило, турбує, а не допомагає. У Scala це виглядає інакше, ви можете запобігти великій кількості помилок за допомогою компілятора Scala.
Жюльєн Турне: Для мене найбільшим викликом у професійному розвитку є “масштабування” проекту. Під цим я маю на увазі роботу над проектом, який стає все більшим і більшим, і з командою, до якої входить все більше розробників. На мій погляд, типи систем дуже допомагають у подоланні цієї проблеми.
Якщо ви розробник Java, запитайте себе: Чому я віддаю перевагу Java перед Python чи JavaScript? Якщо ваша відповідь "Оскільки мені подобаються статичні мови", ви можете перевірити, що можуть запропонувати інші мови в цьому полі. Є мови, які мають набагато кращу систему типу, ніж Java. Потім ви можете спробувати Scala, наприклад, або Haskell, мета-мову, або навіть Idris. Перевага Scala полягає в тому, що вона працює на JVM, що полегшує перехід із існуючої бази коду Java на Scala.
У частині 2 експертної перевірки ми розглядаємо відмінності між Scala та функціональним програмуванням з лямбда-виразами Java 8. Залишайтеся з нами!
І ти? Коментуйте і перемагайте!
Що для вас захоплює Scala? Де ви бачите переваги - або недоліки - Scala перед Java?
Коментуйте тут!
Серед усіх конструктивних коментарів щодо експертної перевірки Scala Ми даруємо три примірники книги "Початок роботи зі Скалою" Хайко Зебергер. (Не забудьте ввести свою електронну адресу для цього).