Скала во стручна проверка Зошто Скала, а не Јава

Во досието за темата Скала, го истражуваме прашањето каде се наоѓа моментално популарниот јазик на ЈВМ и каде е насочен. Во стручната проверка, шест искусни развивачи на Скала ни ја даваат својата перспектива за Скала. Дел 1 се занимава со прашањето што ја прави фасцинацијата на Скала и што Скала всушност го има пред Јава.
Коментирај и победи!
Дискутирај со! Меѓу сите конструктивни коментари за стручната проверка на Скала Подаруваме три примероци од книгата „Започнуваме со Скала“ од Хајко Зибергер.
твоето мислење е важно!
Зошто сте развивач на Скала? Што е тоа што ве фасцинира лично со јазикот?
Хајко Сибергер: Она што ме фасцинира особено кај Скала е тоа што можете - како на неколку други јазици - да напишете код што е концизен и разбирлив во исто време. Ова најдобро се гледа во класи на случаи, кои претставуваат објекти со непроменлива вредност со „вградени“ имплементации на еднакви и усогласување на хаш-код и шема - квази „вклучување на стероиди“. Ака ги користи овие карактеристики за да утврди како реагира актерот на пораките:
Ако требаше да го имплементирате овој пример во Јава, ќе треба да напишете повеќелиниски класи со полиња, приматели и пред се со имплементации за еднакви и hashCode, наместо класи со големи букви. И наместо совпаѓање на шаблони, ќе мора да работите со примероци за типови и тип. Дури и ако модерните ИДИ ослободат дел од работата, добиениот код останува многу пообемен и нејасен, со Јава фокусот не е толку остар на реалното „што“.
Експертите од Скала
Хајко Сибергер: Соработник на кодецентрик. Автор на книгата „Почнуваме со Скала.“ @Hseeberger
Julулијан Турнај: CTO на @mfg_labs и автор на jto/валидација
Даниела Сфрегола: Блогер и Технички лидер во PayTouch. @DanielaSfregola
Иван Кусалиќ: Инженер за софтвер ОВДЕ. Организатор на берлинскиот софтвер Занаетчиска средба, SoCraTes. @ikusalic
Даниел Вестхајд: Консултант во innoQ. Автор на „Водичот на Неофит за Скала“. @Kaffeecoder
Маркус Хаук: ИТ консултант и Скала тренер на кодецентрик.
Даниел Вестхајд: Првично ме интересираше Скала затоа што веќе започнав да програмирам во Јава во нешто пофункционален стил, но во одреден момент веќе не сакав да ја користам потребната котлара. Она што особено ме фасцинира кај Скала е моќниот тип систем, кој тешко постои на кој било јазик што е мејнстрим.
Два интересни примери: На пример, со помош на повисоки видови и типови класи, можно е да апстрахирам преку Spark RDD (колекција дистрибуирана преку неколку компјутери во кластер) и Scala колекции - мојата апликативна логика не знае ништо за тоа дали јас стартувајте го во кластерот Spark на RDD или локално на машина на мала колекција Scala. Таканаречените фантомски типови ми овозможуваат да се осигурам дека во времето на компајлирање не случајно пишувам пристапи до мојата база на податоци за читани робови.
Иван Кусалиќ: Скала е одличен програмски јазик кој е особено погоден за обработка на заднина во средини на претпријатијата. Она што најмногу ми се допаѓа е поддржаното мноштво стилови на програмирање: претпочитам мешавина од функционално и објектно-ориентирано програмирање, во кое функционалниот пристап обезбедува непроменливост и проток на процес, додека објектно-ориентиран пристап обезбедува добра капсулација на податоци.
Скала е многу експресивен јазик и вистинско задоволство за работа. Тоа овозможува создавање на флексибилни и безбедни дизајни кои едноставно не се можни на многу други јазици. Од едноставни DSL до класи за тип, па дури и макроа, ако ви требаат. Поголемиот дел од времето, работата со Скала се чувствува како да можам да ги преведам моите мисли директно во код, без да се мачам со незгодни и долги преводи.
И тогаш секако има момци! Јас навистина повеќе не можам да замислам да работам со јазик што нема изразни типови. На крај, но не и најважно, треба да се спомене убавината на одликите што се потпираат едни на други. Всушност, фактот дека имате класи за типови како дизајн шема, а не како вградена карактеристика, кажува сè.
Маркус Хаук: Скала ме фасцинира затоа што комбинира функционално програмирање на JVM со систем со експресивен тип. Интероперабилноста со Java е уште еден бонус, особено кога станува збор за постепено мигрирање од воспоставена база на кодови во Java во Scala.
Даниела Сфрегола: Во претходниот живот бев развивач на Java. Навистина уживав кога работев со јазикот. Но, по неколку години развој, сакав да пробам пофлексибилен и експресивен јазик, поради што решив да играм малку со Скала. Во тоа време, сè уште беше еден од сјајните нови јазици со кои играа кул децата.
Никогаш не се вратив од патувањето. Според мое мислење, Скала е фасцинантен и моќен јазик што му овозможува на програмерот да одлучи како треба да изгледа кодот. За другите јазици, оваа одлука најверојатно ќе биде донесена со јазичната синтакса.
Julулиен Турнај: Околу 2009 година започнав да играм со Скала. Главната причина за ова беа ламбите, што многу ми недостасуваа во Јава. Во тоа време, работев во иста компанија со Гијом Борт, кој ја разви Рамката за игра. Гијом и остатокот од компанијата се интересираа за Скала неколку месеци подоцна. Ја искористив можноста да го користам јазикот професионално и останав со него.
Како што се разбирав подобро со Скала, работите што ми се допаѓаат за јазикот многу се променија. На почетокот, ламбдите се чувствуваа како што треба. Направив многу во JavaScript, и можеби звучи како парадокс, но Скала се чувствуваше поблиску до JavaScript отколку Java. Потоа, дознав малку повеќе за тоа, открив класи на типови, потоа чисто функционално програмирање, теорија на категории, програмирање на ниво на тип, логика, теорија на програмски јазик - и сè уште учам!
Она што особено го сакам кај Скала е патувањето. Јазикот не помага само да напишете подобри програми. Скала и нејзината заедница можат да обезбедат „раст“ како развивач. Започнува со многу основни проблеми („Јава е премногу разговорлива“, „Сакам ламбди“, „Сакам да користам Искра“), и колку повеќе влегувате во јазикот, толку повеќе сте изложени на целиот свет на нови концепти. Не постојат само нови библиотеки или алатки, туку и комплетно нови идеи. Отпрвин се чувствува целосно поразително, но по некое време уживате во учењето.
Зошто Скала, а не Јава?
Даниел Вестхајд: Во прилог на многу помоќниот тип систем, постојат низа други причини зошто генерално би ја претпочитал Скала. Две што би сакал да ги издвојам во овој момент и кои се во одредена мерка поврзани едни со други се, од една страна, можноста за дефинирање алгебарски типови на податоци и, од друга страна, појавување на обрасци со цел да се работи со овие типови на податоци со лесно читлив код.
Во следниот примерок со кодови, ги гледаме и двете на дело: Дефинираме алгебарски тип на податоци наречен Сесија и правиме разлика помеѓу сесија на најавен корисник и анонимна сесија. Потоа користиме појавување на обрасци за да вратиме или персонализирани или општи препораки:
Даниела Сфрегола: Иако Java е пред искористување на пофункционален стил, Скала има некои карактеристики што ги нема (сеуште) Јава и многу покомпактна синтакса. Ова го прави програмирањето со Скала многу позабавно и попродуктивно отколку со Јава - иако морам да признаам дека е потешко да се научи Скала.
Иван Кусалиќ: За Скала зборуваат сигурноста на видот, експресивноста, концизноста, функционалната парадигма, можностите за апстракција итн. Во крајна линија е дека Јава и Скала се едноставно два многу различни јазика. Скала е многу повеќе од Јава, и ќе бидат потребни часови да ги одредиме сите овие точки.
Се разбира, Скала има и недостатоци: поголема комплексност и стрмна крива на учење. И пазарот на трудот. За брзината може да се дискутира, но сметам дека малку код што навистина треба да се измени е непропорционален на читливоста. Покрај тоа, ако се сомневате, можете да го напишете ова директно во Јава ако оптимизацијата е навистина неопходна. Но, пазарот на трудот е навистина голем минус во споредба со Јава. Со сè друго, Скала победува - и тоа претежно големо.
Маркус Хаук: Поради системот на типови на Скала. Јава има некои сериозни слабости и во пракса пишувањето има тенденција да вознемирува наместо да помага. Во Скала изгледа поинаку, може да спречите голем број грешки со компајлерот Скала.
Julулиен Турнај: За мене, најголемиот предизвик во професионалниот развој е „скалирање“ на проект. Под тоа мислам да работам на проект кој станува сè поголем и со тим кој вклучува се повеќе програмери. Според мое мислење, типските системи помагаат многу во ублажувањето на овој проблем.
Ако сте развивач на Java, запрашајте се ова: Зошто претпочитам Java отколку Python или JavaScript? Ако вашиот одговор е „Бидејќи сакам статички јазици“, можеби ќе сакате да проверите што можат да понудат другите јазици во оваа област. Постојат јазици таму што имаат многу подобар тип систем од Јава. Потоа можете да ја испробате Скала, на пример, или Хаскел, мета-јазик или дури и Идрис. Scala има предност што работи на JVM, што го олеснува мигрирањето од постојната база на Java кодови во Scala.
Во делот 2 од стручната проверка, ги разгледуваме разликите помеѓу Скала и функционалното програмирање со изрази Java 8 Lambda. Останете со нас!
И ти? Коментирај и победи!
Која е фасцинацијата на Скала за вас? Каде ги гледате предностите - или недостатоците - на Скала во однос на Јава?
Коментирајте овде!
Меѓу сите конструктивни коментари за стручната проверка на Скала Подаруваме три примероци од книгата „Започнуваме со Скала“ од Хајко Сибергер. (Не заборавајте да ја внесете вашата адреса за е-пошта за ова).