portaldacalheta.pt
  • Главни
  • Агиле Талент
  • Финансијски Процеси
  • Дизајн Бренда
  • Трендови
Технологија

Сцала насупрот Јави: Зашто да учим Сцалу?



Постоји истина у тврдњи да је „Сцала тешка“, али крива учења вреди уложити. Неке сложеније особине језика ( Туплес , Функције , Макрои , да набројимо неколико) на крају олакшавају програмеру писање бољег кода и повећати перформансе програмирањем у Скали. Искрено, програмери смо и ако нисмо довољно паметни да научимо језик који има неку сложеност, онда погрешно послујемо.

Мердевине је ЈВМ језик безбедан за тип који укључује и објектно оријентисано и функционално програмирање у изузетно концизан, логичан и изузетно моћан језик. Неки ће се можда изненадити када сазнају да Сцала није толико нова као што су мислили, јер је први пут представљена 2003. године. Међутим, посебно у последњих неколико година Сцала је почела да развија значајне следбенике . Што поставља питање „Зашто Сцала?“.



Овај чланак испитује предности Сцале, посебно у односу на Јаву (јер је Сцала написана да ради у ЈВМ-у). Сцала није једини покушај стварања „боље Јава“. Алтернативе као што су Котлин и Цеилон су такође ишли тим путем, али донели су основну одлуку да остану врло блиски у синтакси са самим језиком Јава, како би минимализовали криву учења. Ово се може чинити сјајном идејом, али на крају је помало самопоражавајуће јер вас приморава да останете у оквиру низа оних истих Јава парадигми које су и биле разлог за жељу да се створи „боља Јава“.



Супротно томе, Сцала је створена посебно са циљем да буде боља Језик , избацујући оне аспекте Јаве које је сматрао рестриктивним, претерано заморним или фрустрирајућим за програмера. Као резултат, заиста постоје разлике у коду и промене парадигми које могу мало отежати рано учење Сцала програмирања, али резултат је много чишћи и добро организован језик који је на крају лакши за употребу и повећава продуктивност.



Када се упоређују Сцала и Јава упоредо, ефикасност Сцале је јасна.

Сцала вс. Јава: Шта је заиста сложеније?

Иако је једноставност језика Јава део његовог успеха, иронично је и то што је допринело његовој сложености. Свакако, на Јави можете писати скоро све, али редови кода потребни за то могу бити застрашујући. С друге стране, програмирање у Сцали има мало сложенију структуру. Али ако можете да напишете мало сложенији једно линија кода која замењује 20 „једноставнијих“ линија Јаве, која је заиста сложенија?



Истина је да је Јава често превише детаљна. У Сцали је компајлер невероватно паметан, па се тиме избегава да програмер мора експлицитно да наведе оне ствари за које компајлер може да закључи. Упоредите, на пример, ово једноставно „Здраво, свет!“ програм на Јави против Сцале:

Здраво, свет у Јави:



public class HelloJava { public static void main(String[] args) { System.out.println('Hello World!'); } }

Поздрав свету у Скали:

object HelloScala { def main(args: Array[String]): Unit = { println('Hello World!') } }

Иако овде нема велике разлике између ова два језика, Сцала је мање детаљна чак и у овом једноставном примеру.



За практичнији пример, погледајмо стварање једноставне листе жица:

Јава:



List list = new ArrayList(); list.add('1'); list.add('2'); list.add('3');

Лествица:

val list = List('1', '2', '3')

Свакако у Јави постоје неки трикови да се код мало скрати, али не у уобичајеној употреби.



Сада размотримо случај када имамо листу низова који су бројеви, али желимо да ту листу претворимо у листу целих бројева:

Јава:

List ints = new ArrayList(); for (String s : list) { ints.add(Integer.parseInt(s)); }

Лествица:

val ints = list.map(s => s.toInt)

Захваљујући Сцала-иним функционалним својствима, ова конверзија постаје изузетно једноставна.

Пример класе: Јава против Сцале

Идемо ствари корак даље и упоредимо стандардни пасуљ / обичан стари Јава објекат (ПОЈО) стварање у Јави и Скали.

научи Ц++\

Прво, Јава верзија:

public class User { private String name; private List orders; public User() { orders = new ArrayList(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getOrders() { return orders; } public void setOrders(List orders) { this.orders = orders; } } public class Order { private int id; private List products; public Order() { products = new ArrayList(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public List getProducts() { return products; } public void setProducts(List products) { this.products = products; } } public class Product { private int id; private String category; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } }

Фуј. Лотта код.

Сада верзија Сцале:

class User { var name: String = _ var orders: List[Order] = Nil } class Order { var id: Int = _ var products: List[Product] = Nil } class Product { var id: Int = _ var category: String = _ }

За који језик смо рекли да је сложенији ?!

Да ли смо поштени?

Ако сте до сада стигли и програмирате Јава, у овом тренутку можда мислите да вршим неправедно поређење кода. На крају, ништа ме не спречава да направим јавне променљиве у Јави, а затим да се отарасим гетера и постављача.

Међутим, ако се вратите резоновању иза гетера и постављача у Јави, то је посебно за проверу будућности. Односно, ако касније требате да додате логику било добијању или подешавању променљивих, морали бисте да препишете те јавне променљиве да бисте уместо тога користили методе (због чега се у Јава-у подстиче употреба гетера и постављача) ). Међутим, у програмирању Сцала то није случај. Због језичког дизајна, апстракција остаје нетакнута без потребе за гетерима и постављачима. Размотрите, на пример, ово измењено User класа у Сцали која баца NullPointerException ако покушате да подесите име на нулл:

class User { private var _name: String = _ var orders: List[Order] = Nil def name = _name def name_=(name: String) = { if (name == null) { throw new NullPointerException('User.name cannot be null!') } _name = name }

А име и даље можете поставити овако:

user.name = 'John Doe'

Имајте на уму да ово у потпуности уклања потребу за унапред конфигурисањем приступника методама.

Штавише, с обзиром да Сцала преферира непроменљивост, ово могу да напишем у Сцали још сажетије са класама класа:

case class User(name: String, orders: List[Order]) case class Order(id: Int, products: List[Product]) case class Product(id: Int, category: String)

Прилично лудо колико мање кода морам да напишем.

Узимајући пример мало даље

Сада размотрите сценарио са горе наведеним класама где желим да додам изврстан мали метод у User класа која враћа листу свих Products да је User је наредио:

У опширном свету Јаве:

да ли Ц++ има сакупљање смећа
public List getProducts() { List products = new ArrayList(); for (Order order : orders) { products.addAll(order.getProducts()); } return products; }

Срећом, java.util.List има addAll метода, или getProducts() било би још дуже на Јави.

С друге стране, у Сцали нам је потребно само:

def products = orders.flatMap(o => o.products)

Можете видети колико је мања примена језика Сцала. Да, може изгледати сложеније за Сцала почетника, али када у потпуности разумете концепте који стоје иза њега, Сцала код ће изгледати много једноставније од Јава кода.

Хајде да се овде мало закомплицирамо. Шта ако желимо добити само Products у оквиру одређеног Category?

У овом случају нисмо у могућности да искористимо предност addAll метода у java.util.List, тако да ствари постају ружније на Јави :

public List getProductsByCategory(String category) { List products = new ArrayList(); for (Order order : orders) { for (Product product : order.getProducts()) { if (category.equals(product.getCategory())) { products.add(product); } } } return products; }

У Скали међутим, код остаје прилично једноставан. Једноставно користимо flatMap да комбинују листе производа са сваког Order изравнати у једну листу, а затим филтрирамо да бисмо укључили само оне који се подударају са категоријом:

def productsByCategory(category: String) = orders.flatMap(o => o.products).filter(p => p.category == category)

Динамички наспрам статичког

У последњих неколико година сигурно није недостајало нових језика, али док су готово сви остали који су се недавно појавили динамични, Сцала је статички откуцана.

Као професионални програмер - иако знам и користим многе динамичке језике - моје је мишљење да су провере времена компајлирања невероватно важне за писање солидног кода. У динамичном језику никада не можете бити сигурни да је ваш код без грешака и робустан док га заправо не покренете у широком спектру сценарија. То може довести до потенцијално озбиљних недостатака у коду који се никада неће реализовати док се код не произведе.

Упаковати

Надамо се да овај чланак ставља Јава насупрот Сцале довољно да вам пружи прелиминарни осећај снаге и могућности Сцале и подстакне апетит за учењем језика. Не само да је то сјајан језик који програмирање може учинити мање досадним и угоднијим, већ и постојањем које користе неке од највећих компанија на свету (ЛинкедИн, Твиттер, ФоурСкуаре, Тхе Гуардиан, да набројимо само неке).

Популарност и употреба Сцале брзо расте, о чему сведочи и све већи број отворених позиција за Програмери Сцале . Ако то већ нисте учинили, сада би било право време да започнете јахање таласа и престанете да питате „Зашто учити Сцала?“

Разумевање основа

Шта је Сцала?

Сцала је моћан програмски језик на високом нивоу који укључује објектно оријентисано и функционално програмирање. То је језик сигуран за тип који се ослања на ЈВМ време извршавања.

За шта се користи Сцала?

Много ствари, од машинског учења до веб апликација. Као језик опште намене високог нивоа, Сцала се може похвалити широким спектром могућих примена. Сцала омогућава програмерима да добро користе стандардне ЈВМ функције и Јава библиотеке.

Како научити Сцалу и одакле да започнем?

Ако размишљате о роњењу на Скали, очигледно ће вам бити од помоћи Јава и нећете имати проблема са проналажењем ресурса за учење на мрежи. Међутим, ако немате Јава искуства, мораћете да научите основе. Помоћи ће и познавање функционалних програмских језика.

Које компаније користе Сцалу?

Према извештајима медија и званичним изјавама, Сцалу користе бројне технолошке компаније, укључујући Нетфлик, Твиттер, ЛинкедИн, АирБнБ, АТ&Т, еБаи, па чак и Аппле. Такође се користи у финансијама, попут Блоомберга и УБС-а.

Зашто Сцала није (пре) популарна.

Последњих година Сцала је изгубила део своје привлачности, што је неке навело на закључак да је на одласку. О овоме нема велике расправе. Иако је истина да су је неке истакнуте компаније напустиле, Сцала је и даље јака и задржава велики број следбеника.

Оптимизација прихода од малопродаје помоћу предвиђања продаје АИ

Наука О Подацима И Базе Података

Оптимизација прихода од малопродаје помоћу предвиђања продаје АИ
Квалитет зараде: кључни стуб финансијске провере

Квалитет зараде: кључни стуб финансијске провере

Финансијски Процеси

Популар Постс
Како створити бот за анализу расположења е-поште: Водич за НЛП.
Како створити бот за анализу расположења е-поште: Водич за НЛП.
Поуке из инвестиционе стратегије Варрена Буффетта и његове грешке
Поуке из инвестиционе стратегије Варрена Буффетта и његове грешке
Зашто отплата дељења не успева? Неки предложени лекови
Зашто отплата дељења не успева? Неки предложени лекови
Повећајте своју продуктивност помоћу Амазон Веб Сервицес
Повећајте своју продуктивност помоћу Амазон Веб Сервицес
Развој Андроид ТВ-а - Долазе велики екрани, припремите се!
Развој Андроид ТВ-а - Долазе велики екрани, припремите се!
 
Доступност на мрежи: зашто се стандарди В3Ц често игноришу
Доступност на мрежи: зашто се стандарди В3Ц често игноришу
Алати наредбеног ретка за програмере
Алати наредбеног ретка за програмере
Зен девРант-а
Зен девРант-а
Заступства и гаранција: Алат за спајања и преузимања о коме би сваки продавац требао знати
Заступства и гаранција: Алат за спајања и преузимања о коме би сваки продавац требао знати
Значај дизајна усмереног на човека у дизајну производа
Значај дизајна усмереног на човека у дизајну производа
Популар Постс
  • шта се дешава у поглављу 11 банкрота
  • шта ради финансијски директор компаније
  • пхп претворити утф8 у асции
  • учење како да постављају фокусирана питања дизајна
  • шта је мешовито целобројно програмирање
  • колико има ерц20 жетона
Категорије
  • Агиле Талент
  • Финансијски Процеси
  • Дизајн Бренда
  • Трендови
  • © 2022 | Сва Права Задржана

    portaldacalheta.pt