apeescape2.com
  • Pagrindinis
  • Technologija
  • Ns Dizainas
  • Kpi Ir „Analytics“
  • Inžinerijos Valdymas
Technologija

„Scala“ ir „Java“: kodėl turėčiau mokytis „Scala“?

Tiesa, teiginyje, kad „Scala yra sunku“, yra tiesos, tačiau mokymosi kreivė yra verta investicijų. Kai kurie sudėtingesni kalbos bruožai ( Tuples , Funkcijos , Makrokomandos , jei norite paminėti keletą), galų gale kūrėjui bus lengviau parašyti geresnį kodą ir padidinti našumą programuodami Skaloje. Atvirai kalbant, mes esame programuotojai, ir jei nesame pakankamai protingi, kad išmoktume kalbą, kuri turi tam tikrą sudėtingumą, tada esame netinkamo verslo.

Kopėčios yra saugi tipui JVM kalba, į objektyvų ir funkcinį programavimą įtraukianti į itin glaustą, logišką ir nepaprastai galingą kalbą. Kai kurie gali nustebti žinodami, kad „Scala“ nėra tokia nauja, kaip jie manė, pirmą kartą pristatyta 2003 m. Tačiau ypač per pastaruosius kelerius metus „Scala“ pradėjo kurti reikšmingą stebėtoją . Dėl ko kyla klausimas „Kodėl Scala?“.



Šiame straipsnyje nagrinėjami „Scala“ pranašumai, ypač palyginti su „Java“ (nes „Scala“ yra parašyta vykdyti JVM). „Scala“ nėra vienintelis bandymas sukurti „geresnę„ Java “. Tokios alternatyvos kaip Kotlinas ir Ceilonas taip pat nuėjo tuo keliu, tačiau jie priėmė esminį sprendimą likti labai arti pačios „Java“ kalbos sintaksės, kad sumažintų mokymosi kreivę. Tai gali atrodyti puiki idėja, bet galų gale ji šiek tiek nusižengia tuo, kad verčia jus likti tose pačiose „Java“ paradigmose, dėl kurių pirmiausia norėjosi sukurti „geresnę„ Java “.



Priešingai, „Scala“ buvo sukurta specialiai tam, kad būtų geresnė kalba , atskleidė tuos „Java“ aspektus, kuriuos ji laikė ribojančiais, pernelyg varginančiais ar varginančiais kūrėjo. Todėl iš tiesų yra kodų skirtumai ir paradigmos pokyčiai, kurie gali šiek tiek apsunkinti ankstyvą „Scala“ programavimo mokymąsi, tačiau rezultatas yra daug švaresnė ir gerai organizuota kalba, kurią galiausiai lengviau naudoti ir padidinti produktyvumą.

Lyginant „Scala“ ir „Java“ greta, „Scala“ efektyvumas yra aiškus.



„Scala“ ir „Java“: kuris iš tikrųjų yra sudėtingesnis?

Nors „Java“ kalbos paprastumas buvo jos sėkmės dalis, ironiškai, ji taip pat prisidėjo prie jos sudėtingumo. Žinoma, „Java“ galite parašyti beveik bet ką, tačiau tam reikalingos kodo eilutės gali būti bauginančios. Kita vertus, „Scala“ programavimas yra šiek tiek sudėtingesnės struktūros. Bet jei galite parašyti šiek tiek sudėtingesnį viengungis kodo eilutė, pakeičianti 20 „paprastesnių“ „Java“ eilučių, kuri iš tikrųjų yra sudėtingesnė?

Tiesa ta, kad „Java“ yra tiesiog per daug kalbanti. Programoje „Scala“ kompiliatorius yra nepaprastai protingas, todėl kūrėjui nereikia aiškiai nurodyti tų dalykų, kuriuos kompiliatorius gali padaryti. Palyginkite, pavyzdžiui, šį paprastą „Hello World!“ programa „Java“ ir „Scala“:

Sveikas pasaulis „Java“:



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

Sveikas pasaulis Scaloje:

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

Nors čia nėra didelio skirtumo tarp dviejų kalbų, „Scala“ net ir šiame paprastame pavyzdyje yra mažiau vertinga.

Norėdami gauti praktiškesnį pavyzdį, pažvelkime į paprasto styginių sąrašo sukūrimą:

„Java“:

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

Kopėčios:

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

Be abejo, „Java“ yra keletas gudrybių, kurios šiek tiek sutrumpina kodą, tačiau ne įprastai.

Dabar apsvarstykite atvejį, kai turime eilučių, kurios yra skaičiai, sąrašą, tačiau mes norime konvertuoti šį sąrašą į sveikųjų skaičių sąrašą:

„Java“:

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

Kopėčios:

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

Dėl „Scala“ funkcinių savybių ši konversija tampa itin paprasta.

Klasės pavyzdys: „Java“ ir „Scala“

Pažvelkime žingsniu toliau ir palyginkime standartinius pupelius / paprastas senas „Java“ objektas (POJO) kūrimas „Java“ ir „Scala“.

kaip kainuoti ipo

Pirma, „Java“ versija:

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; } }

Phew. Lotta kodas.

Dabar „Scala“ versija:

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 = _ }

Kuri kalba pasakėme, kad sudėtingesnė ?!

Ar mes teisingi?

Jei tai padarėte iki šiol ir esate „Java“ programuotojas, galite galvoti, kad aš nesąžiningai palyginu kodą. Juk niekas netrukdo man viešai skelbti kintamuosius „Java“ ir tada atsikratyti getters ir seterių.

Vis dėlto, jei jūs pagalvotumėte apie „Java“ praktikų ir atsiskaitymų argumentus, tai yra skirta būtent ateičiai. Tai yra, jei vėliau reikės pridėti tam tikrą logiką prie kintamųjų gavimo ar nustatymo, turėtumėte iš naujo parašyti tuos viešuosius kintamuosius, kad vietoj jų būtų naudojami metodai (todėl „Java“ programoje raginama pradėti naudoti skaičiuoklius ir nustatytuvus) ). Tačiau programuojant „Scala“ taip nėra. Dėl kalbos dizaino abstrakcija lieka nepažeista, nereikalaujant getters ir seterių. Apsvarstykite, pavyzdžiui, šį modifikuotą User klasė „Scaloje“, kuri meta NullPointerException jei bandysite nustatyti vardą į nulį:

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 }

Ir vis tiek galite nustatyti tokį pavadinimą:

user.name = 'John Doe'

Atkreipkite dėmesį, kad tai visiškai nereikalauja iš anksto sukonfigūruoti metodo prieigos priemonių.

Be to, kadangi „Scala“ teikia pirmenybę nekintamumui, tai „Scala“ galiu parašyti dar glaustiau su atvejų klasėmis:

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

Gana beprotiška, kiek mažiau kodo turiu parašyti.

Paimkite pavyzdį šiek tiek toliau

Dabar apsvarstykite scenarijų su pirmiau paminėtomis klasėmis, kai noriu pridėti puikų metodą User klasė, kuri pateikia visų Products sąrašą kad User įsakė:

Įprastame „Java“ pasaulyje:

public List getProducts() { List products = new ArrayList(); for (Order order : orders) { products.addAll(order.getProducts()); } return products; }

Laimei, java.util.List turi addAll metodas arba getProducts() būtų buvę dar ilgiau „Java“.

Kita vertus, „Scaloje“ mums reikia tik:

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

Galite pamatyti, kiek mažesnis yra „Scala“ kalbos diegimas. Taip, „Scala“ naujokui tai gali atrodyti sudėtingiau, tačiau kai iš tikrųjų visiškai suprasite jo sąvokas, „Scala“ kodas atrodys kur kas paprastesnis nei „Java“ kodas.

Čia pasidarykime dar šiek tiek komplikuotiau. Ką daryti, jei norime gauti tik Products per tam tikrą Category?

Šiuo atveju negalime pasinaudoti addAll pranašumais metodas java.util.List, todėl viskas tampa bjauriau Java kalba :

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; }

Skaloje , tačiau kodas išlieka gana paprastas. Mes tiesiog naudojame flatMap sujungti kiekvienos Order produktų sąrašus suplotas į vieną sąrašą, tada mes filtruojame įtraukdami tik tuos, kurie atitinka kategoriją:

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

Dinaminis ir statinis

Per pastaruosius kelerius metus naujų kalbų tikrai netrūko, tačiau, nors beveik visos kitos neseniai atsiradusios kalbos yra dinamiškos, „Scala“ yra tipiškas.

Kaip profesionalus kūrėjas, nors aš žinau ir naudoju daug dinamiškų kalbų, manau, kad kompiliavimo laiko patikros yra nepaprastai svarbios norint parašyti tvirtą kodą. Dinamiškoje kalboje niekada negalėsite būti tikri, kad jūsų kodas yra pakankamai be klaidų ir tvirtas, kol iš tikrųjų nepaleisite jo pagal įvairius scenarijus. Tai gali sukelti potencialiai rimtų kodo defektų, kurie niekada nesuvokiami tol, kol kodas yra gaminamas.

Apvyniojimas

Tikimės, kad šiame straipsnyje pakankamai daug „Java“ ir „Scala“, kad iš anksto suprastumėte „Scala“ galią ir galimybes ir sužadintumėte norą mokytis kalbos. Tai ne tik puiki kalba, dėl kurios programavimas gali būti mažiau varginantis ir malonesnis, bet ir buvimas naudoja vienos didžiausių kompanijų pasaulyje („LinkedIn“, „Twitter“, „FourSquare“, „The Guardian“, tik keli jų vardai).

„Scala“ populiarumas ir naudojimas sparčiai auga, ką įrodo vis didesnis atvirų pozicijų skaičius „Scala“ kūrėjai . Jei dar to nepadarėte, dabar būtų tinkamas metas pradėti važiuoti banga ir nebeklausti „Kodėl mokytis„ Scala “?“

$ klaida [] php

Suprasti pagrindus

Kas yra „Scala“?

„Scala“ yra galinga aukšto lygio programavimo kalba, apimanti objektyvų ir funkcinį programavimą. Tai saugi tipui kalba, kuri remiasi JVM vykdymo laiku.

Kam vartojamas Scala?

Daugybė dalykų, pradedant mašininiu mokymusi, baigiant žiniatinklio programomis. „Scala“, kaip aukšto lygio bendrosios kalbos kalba, gali pasigirti plačiu galimų programų spektru. „Scala“ leidžia kūrėjams gerai naudoti standartines JVM funkcijas ir „Java“ bibliotekas.

Kaip išmokti „Scala“ ir nuo ko pradėti?

Jei svarstote pasinerti į „Scala“, akivaizdu, kad turėsite „Java“ išsilavinimą, ir jums nebus sunku rasti mokymosi išteklių internete. Tačiau jei neturite „Java“ patirties, turėsite išmokti pagrindų. Taip pat padės susipažinti su funkcinėmis programavimo kalbomis.

Kokios įmonės naudoja „Scala“?

Remiantis žiniasklaidos pranešimais ir oficialiais pareiškimais, „Scala“ naudoja daugybė technologijų kompanijų, įskaitant „Netflix“, „Twitter“, „LinkedIn“, „AirBnB“, AT&T, „eBay“ ir net „Apple“. Jį taip pat naudoja finansai, tokie kaip „Bloomberg“ ir UBS.

Kodėl „Scala“ nėra (per) populiari.

Pastaraisiais metais „Scala“ prarado dalį savo patrauklumo, todėl kai kurie padarė išvadą, kad tai yra išeitis. Tai nėra mažų diskusijų objektas. Nors tiesa, kad kai kurios garsios kompanijos to atsisakė, „Scala“ vis dar stipriai veikia ir išlaiko daugybę pasekėjų.

Atnaujinkite „Analytics“ naudodami šiuos informacijos suvestinės dizaino įkvėpimus

Ns Dizainas

Atnaujinkite „Analytics“ naudodami šiuos informacijos suvestinės dizaino įkvėpimus
Serverio pusės įvesties / išvesties našumas: mazgas prieš PHP ir „Java“ prieš „Go“

Serverio pusės įvesties / išvesties našumas: mazgas prieš PHP ir „Java“ prieš „Go“

Atgal

Populiarios Temos
Dizaino švietimo būklės ekspertų perspektyvos
Dizaino švietimo būklės ekspertų perspektyvos
10 populiariausių klaidų, kurias daro „Android“ kūrėjai: programavimo pamoka
10 populiariausių klaidų, kurias daro „Android“ kūrėjai: programavimo pamoka
Kaip sukurti pasirinktinius „Magento 2“ valdiklius
Kaip sukurti pasirinktinius „Magento 2“ valdiklius
Reaguokite į testą kuriama plėtra: nuo vartotojo istorijų iki gamybos
Reaguokite į testą kuriama plėtra: nuo vartotojo istorijų iki gamybos
Talentų tiekimo direktorius
Talentų tiekimo direktorius
 
Įvadas į „JavaScript“ automatizavimą naudojant „Gulp“
Įvadas į „JavaScript“ automatizavimą naudojant „Gulp“
Vyresnysis inžinierius iš varžybų komandos
Vyresnysis inžinierius iš varžybų komandos
Pradėkite savo PHP testavimą naudodamiesi kodeception
Pradėkite savo PHP testavimą naudodamiesi kodeception
Mastelis su greičiu: paaiškinta „Bitcoin Lightning Network“
Mastelis su greičiu: paaiškinta „Bitcoin Lightning Network“
„JavaScript“ prototipų grandinės, taikymo srities grandinės ir našumas: ką reikia žinoti
„JavaScript“ prototipų grandinės, taikymo srities grandinės ir našumas: ką reikia žinoti
Populiarios Temos
  • kas yra manekenų kriptovaliuta
  • „corp to corp vs w2“ skaičiuoklė
  • console.log nėra funkcija
  • kaip vertinti biotechnologijų bendrovę
  • mazgas js meta naują klaidą
  • ką aš galiu padaryti su c programavimu
Kategorijos
Prekės Ženklo Dizainas Nuotolinio Ryšio Pakilimas Pelningumas Ir Efektyvumas Investuotojai Ir Finansavimas Kita Finansų Procesai Mobilusis Inovacijos Atgal Produkto Gyvavimo Ciklas

© 2021 | Visos Teisės Saugomos

apeescape2.com