6 отговора на въпроса: Защо Scala, а не Java?

експертната проверка

В тематичното досие на Scala изследваме въпроса къде се намира популярният език JVM в момента и накъде е насочен. В експертната проверка шестима опитни разработчици на Scala ни дават своя поглед върху Scala. Част 1 се занимава с въпроса какво прави Scala толкова завладяваща и какво Scala всъщност има пред Java.

Коментирайте и спечелете!
Обсъдете с! Сред всички конструктивни коментари относно експертната проверка на Scala Подаряваме три екземпляра от книгата „Първи стъпки със Скала“ от Heiko Seeberger.

вашето мнение се брои!

Защо сте разработчик на Scala? Какво е това, което ви очарова лично за езика?

Хайко Зебергер: Това, което ме очарова по-специално при Scala, е, че можете - както на няколко други езика - да пишете код, който е кратък и разбираем едновременно. Това се вижда най-добре при класовете случаи, които представляват неизменяеми обекти на стойност с “вградени” реализации на equals и hashCode и съвпадение на шаблони - квази “включване на стероиди”. Akka използва тези функции, за да определи как даден актьор реагира на съобщенията:

Ако трябваше да приложите този пример в Java, ще трябва да напишете многоредови класове с полета, getters и преди всичко с реализации за equals и hashCode вместо едноредови класове случай. И вместо съвпадение на шаблони, ще трябва да работите с излъчвания на instanceof и type. Дори ако съвременните IDE облекчат част от работата, полученият код остава много по-обширен и неясен, с Java фокусът не е толкова остър върху действителното „какво“.

Експертите на Scala

Heiko Seeberger: Сътрудник в кодецентричния. Автор на книгата „Първи стъпки със Скала.“ @Hseeberger

Джулиан Турне: технически директор в @mfg_labs и автор на jto/validation

Даниела Сфрегола: Блогър и технологичен лидер в PayTouch. @DanielaSfregola

Иван Кусалич: Софтуерен инженер в ТУК. Организатор на срещата на занаятчийския софтуер в Берлин, SoCraTes. @ikusalic

Даниел Уестхайде: Консултант в innoQ. Автор на „The Neophyte’s Guide to Scala.“ @Kaffeecoder

Маркус Хаук: ИТ консултант и обучител на Scala в codecentric.

Даниел Уестхайде: Първоначално се интересувах от Scala, защото вече бях започнал да програмирам в Java в малко по-функционален стил, но в един момент вече не исках да използвам необходимия за това шаблон. Това, което особено ме очарова при Scala, е мощната система от тип, която едва ли съществува на който и да е език, който е мейнстрийм.

Два интересни примера: С помощта на по-висши типове и типови класове, например, е възможно да се абстрахирам чрез Spark RDD (колекция, разпределена на няколко компютъра в клъстер) и колекции Scala - логиката на моето приложение тогава не знае нищо дали стартирайте го в клъстер Spark на RDD или локално на машина на малка колекция Scala. Така наречените фантомни типове ми позволяват да се уверя по време на компилация, че не случайно пиша достъпи до моята четена подчинена база данни.

Иван Кусалич: Scala е чудесен език за програмиране, който е особено подходящ за вътрешна обработка в корпоративна среда. Най-много ми харесва множеството поддържани стилове на програмиране: Предпочитам комбинация от функционално и обектно-ориентирано програмиране, при което функционалният подход осигурява неизменност и поток на процесите, докато обектно-ориентираният подход осигурява добро капсулиране на данни.

Scala е много изразителен език и истинско удоволствие за работа. Тя позволява създаването на гъвкави и сигурни дизайни, които просто не са възможни на много други езици. От прости DSL до класове за въвеждане или дори макроси, ако имате нужда от тях. В повечето случаи работата със Scala се чувства така, сякаш мога да преведа мислите си директно в код, без да се налага да се занимавам с неудобни и дълги преводи.

И тогава, разбира се, има и момчетата! Наистина вече не мога да си представя да работя с език, който няма изразителни типове. Не на последно място трябва да се спомене красотата на чертите, които се надграждат една върху друга. Всъщност фактът, че имате класове пред вас като шаблон за дизайн, а не като вградена функция, казва всичко.

Маркус Хак: Scala ме очарова, защото съчетава функционално програмиране на JVM с експресивна тип система. Оперативната съвместимост с Java е друг бонус, особено когато става въпрос за постепенно мигриране от установена кодова база в Java към Scala.

Даниела Сфрегола: В предишен живот бях разработчик на Java. Много ми хареса да работя с езика. Но след няколко години развитие исках да опитам по-гъвкав и изразителен език, поради което реших да поиграя малко и със Скала. По това време това все още беше един от лъскавите нови езици, с които готините деца си играеха.

Никога не съм се връщал от пътуването. Според мен Scala е завладяващ и мощен език, който позволява на програмиста да реши как да изглежда кодът. За други езици това решение е по-вероятно да бъде взето от езиковия синтаксис.

Жулиен Турне: Около 2009 г. започнах да играя със Scala. Основната причина за това бяха ламбдите, които много ми липсваха в Java. По това време работех в същата компания с Гийом Борт, който разработи Play Framework. Гийом и останалата част от компанията се интересуват от Скала няколко месеца по-късно. Възползвах се от възможността да използвам езика професионално и останах с него.

Тъй като се разбирах по-добре със 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 печели - и най-вече големи.

Маркус Хак: Заради типа система на Скала. Java има някои сериозни слабости и на практика въвеждането има тенденция да безпокои, а не да помага. В Scala изглежда по различен начин, можете да предотвратите голям брой грешки с компилатора Scala.

Жулиен Турне: За мен най-голямото предизвикателство в професионалното развитие е „мащабирането“ на проект. С това имам предвид работата по проект, който става все по-голям и по-голям и с екип, който включва все повече разработчици. Според мен системите за тип помагат много за облекчаване на този проблем.

Ако сте разработчик на Java, запитайте се следното: Защо предпочитам Java пред Python или JavaScript? Ако отговорът ви е „Тъй като харесвам статичните езици“, може да искате да проверите какво предлагат другите езици в това поле. Има езици, които имат много по-добра система от тип от Java. След това можете да опитате Scala, например, или Haskell, метаезик или дори Idris. Scala има предимството, че работи на JVM, което улеснява мигрирането от съществуваща Java кодова база към Scala.

В част 2 от експертната проверка разглеждаме разликите между Scala и функционалното програмиране с Java 8 Lambda изрази. Останете на линия!

А ти? Коментирайте и спечелете!

Какво е очарованието на Scala за вас? Къде виждате предимствата - или недостатъците - на Scala пред Java?

Коментирайте тук!

Сред всички конструктивни коментари относно експертната проверка на Scala Подаряваме три екземпляра от книгата „Първи стъпки със Скала“ от Heiko Seeberger. (Не забравяйте да въведете вашия имейл адрес за това).