Sunteți pe pagina 1din 5

SCALA VS. JAVA: DE CE AR TREBUI SĂ ÎNVĂȚ SCALA?

Este cert că afirmația potrivit căreia „Scala este greu”, dar curba de învățare merită investiția. Unele
dintre caracteristicile mai complexe ale limbajului ( Tuples , Funcții , Macrocomenzi , pentru a numi
câteva) în cele din urmă facilitează dezvoltatorului să scrie un cod mai bun și crește performanța prin
programare în Scala. Sincer, suntem programatori și, dacă nu suntem suficient de inteligenți pentru a
învăța o limbă care are o oarecare complexitate, atunci ne aflăm într-o afacere greșită.

Scară este un limbaj JVM sigur de tip care încorporează atât programarea orientată pe obiecte, cât și
programarea funcțională într-un limbaj extrem de concis, logic și extraordinar de puternic. Unii ar
putea fi surprinși să știe că Scala nu este la fel de nou pe cât credeau, fiind introdus pentru prima
dată în 2003. Cu toate acestea, în special în ultimii ani, Scala a început să dezvolte un număr
semnificativ de persoane . Ceea ce pune întrebarea „De ce Scala?”.

Acest articol examinează avantajele Scala, în special față de Java (deoarece Scala este scris pentru a
rula în JVM). Scala nu este singura încercare de a crea un „Java mai bun”. Alternative precum Kotlin și
Ceylon au mers, de asemenea, pe această cale, dar au luat decizia fundamentală de a rămâne foarte
aproape în sintaxă de limbajul Java în sine, astfel încât să minimizeze curba de învățare. Aceasta
poate părea o idee grozavă, dar în cele din urmă este oarecum auto-înfrântă în sensul că te obligă să
rămâi într-o serie de aceleași paradigme Java care au fost motivul pentru care vrei să creezi un „Java
mai bun” în primul rând.

În schimb, Scala a fost creat special cu scopul de a fi un mai bun limba , eliminând acele aspecte ale
Java pe care le considera restrictive, excesiv de plictisitoare sau frustrante pentru dezvoltator. Ca
urmare, există într-adevăr distincții de cod și schimbări de paradigmă care pot face învățarea
timpurie a programării Scala puțin mai dificilă, dar rezultatul este un limbaj mult mai curat și bine
organizat, care este în cele din urmă mai ușor de utilizat și crește productivitatea.

Scala vs. Java: Care este într-adevăr mai complex?

În timp ce simplitatea limbajului Java a făcut parte din succesul său, în mod ironic, a contribuit și la
complexitatea sa. Sigur, puteți scrie aproape orice în Java, dar liniile de cod necesare pentru a face
acest lucru pot fi descurajante. Programarea în Scala, pe de altă parte, are o structură puțin mai
complexă. Dar, dacă puteți scrie un ceva mai complex singur linie de cod care înlocuiește 20 de linii
„mai simple” de Java, care dintre ele este într-adevăr mai complexă?

Adevărul este că Java este adesea mult prea verbos. În Scala, compilatorul este incredibil de
inteligent, deci acest lucru evită ca dezvoltatorul să fie nevoit să specifice în mod explicit acele lucruri
pe care compilatorul le poate deduce. Comparați, de exemplu, acest simplu „Hello World!” program
în Java vs. Scala:

Hello World în Java:

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

Hello World in Scala:

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

Deși nu există o distincție uriașă între cele două limbi aici, Scala este mai puțin detaliată chiar și în
acest exemplu simplu.

Pentru un exemplu mai practic, să aruncăm o privire la crearea unei liste simple de șiruri:
Java:

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

Scară:

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

Cu siguranță, există câteva trucuri în Java pentru a scurta puțin codul, dar nu și în utilizarea standard.

Acum, ia în considerare un caz în care avem o listă de șiruri care sunt numere, dar vrem să convertim
lista respectivă într-o listă de numere întregi:

Java:

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

Scară:

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

Datorită proprietăților funcționale ale Scala, această conversie devine extrem de simplă.

Un exemplu de clasă: Java vs. Scala

Să facem lucrurile cu un pas mai departe și să comparăm boabele standard / obiect simplu Java vechi
(POJO) crearea în Java și Scala.

Proprietarii De Francize Sportive Profesionale Sunt De Obicei

În primul rând, versiunea Java:

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. Cod Lotta.

Acum versiunea Scala:

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

Ce limbă am spus că este mai complicată ?!

Suntem corecți?

Dacă ați ajuns până acum și sunteți un programator Java, este posibil să vă gândiți în acest moment
că fac o comparație nedreaptă a codului. La urma urmei, nimic nu mă oprește să fac variabile publice
în Java și apoi să scap de getters și seteri.
Cu toate acestea, dacă vă gândiți înapoi la raționamentul din spatele getters-ului și seterilor din Java,
acesta este specific pentru testarea viitoare. Adică, dacă mai târziu trebuie să adăugați o anumită
logică fie la obținerea, fie la setarea variabilelor, va trebui să rescrieți acele variabile publice pentru a
utiliza în schimb metode (motiv pentru care utilizarea Java și a setatoarelor pentru început este
încurajată în Java ). Cu toate acestea, în programarea Scala acest lucru nu este cazul. Datorită
designului limbajului, abstractizarea rămâne intactă fără a avea nevoie de getters și seters. Luați în
considerare, de exemplu, această modificare User clasă în Scala care aruncă un NullPointerException
dacă încercați să setați numele la 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 }

Și puteți seta în continuare numele astfel:

user.name = 'John Doe'

Rețineți că acest lucru elimină în totalitate necesitatea de a pre-configura accesorii metodei.

Mai mult, din moment ce Scala preferă imuabilitatea, pot scrie acest lucru în Scala și mai concis cu
clasele de cazuri:

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

Destul de nebun cât de puțin cod trebuie să scriu.

Luând exemplul un pic mai departe

Acum, ia în considerare un scenariu cu clasele de mai sus, în care vreau să adaug o metodă minunată
în User clasă care returnează o listă cu toate Products că User a comandat:

În lumea detaliată a Java:

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

Din fericire, java.util.List are un addAll sau getProducts() ar fi fost chiar mai mult în Java.

În Scala, pe de altă parte, tot ce avem nevoie este:

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

Puteți vedea cât de mică este implementarea limbii Scala. Da, poate părea mai complex pentru
începătorul Scala, dar odată ce ați înțeles pe deplin conceptele din spatele acestuia, codul Scala va
părea mult mai simplist decât codul Java.

Să ne complicăm și mai mult aici. Ce se întâmplă dacă vrem să obținem numai Products într-un
anumit Category?

În acest caz, nu putem profita de addAll metoda în java.util.List, deci lucrurile devin mai urâte în Java
:
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; }

În Scala cu toate acestea, codul rămâne destul de simplu. Pur și simplu folosim flatMap pentru a
combina listele de produse din fiecare Order aplatizate într-o singură listă, apoi filtrăm pentru a le
include doar pe cele care se potrivesc categoriei:

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


category)

Dinamic vs. static

Cu siguranță nu au lipsit limbi noi în ultimii ani, dar în timp ce aproape toate celelalte care au apărut
recent sunt dinamice, Scala este de tip static.

În calitate de dezvoltator profesionist - deși știu și folosesc multe limbaje dinamice - cred că
verificările în timp de compilare sunt extrem de importante pentru a scrie cod solid. Într-un limbaj
dinamic, nu puteți fi niciodată sigur că codul dvs. este suficient de lipsit de erori și robust până când
nu îl executați într-o gamă largă de scenarii. Acest lucru poate duce la defecte potențial grave ale
codului care nu se realizează niciodată până când codul nu este în producție.

Învelire

Sperăm că acest articol stivuiește Java vs. Scala suficient pentru a vă oferi un sentiment preliminar al
puterii și capabilităților Scala și vă deschide pofta de învățare a limbii. Nu numai că este un limbaj
excelent care poate face ca programarea să fie mai puțin plictisitoare și mai plăcută, dar și să fie
folosit de unele dintre cele mai mari companii din lume (LinkedIn, Twitter, FourSquare, The Guardian,
pentru a numi doar câteva).

Popularitatea și utilizarea Scala sunt în creștere rapidă, dovadă fiind numărul tot mai mare de poziții
deschise pentru Dezvoltatori Scala . Dacă nu ați făcut deja acest lucru, acum ar fi un moment bun să
începeți să mergeți pe val și să nu mai întrebați „De ce să învățați Scala?”

Înțelegerea elementelor de bază

Ce este Scala?

Scala este un limbaj de programare puternic la nivel înalt care încorporează programare orientată
obiect și funcțională. Este un limbaj sigur de tip care se bazează pe runtime JVM.

Pentru ce se utilizează Scala?

Multe lucruri, de la învățarea automată la aplicațiile web. Ca limbaj de uz general la nivel înalt, Scala
se mândrește cu o gamă largă de aplicații posibile. Scala le permite dezvoltatorilor să utilizeze bine
caracteristicile standard JVM și bibliotecile Java.

Cum să învăț Scala și de unde încep?

Dacă vă gândiți să vă scufundați în Scala, să aveți un background în Java vă va ajuta în mod evident și
nu veți avea probleme în a găsi resurse de învățare online. Cu toate acestea, dacă nu aveți experiență
Java, va trebui să învățați elementele de bază. Familiarizarea cu limbajele de programare funcționale
vă va ajuta, de asemenea.
Ce companii folosesc Scala?

Conform rapoartelor mass-media și declarațiilor oficiale, Scala este utilizat de numeroase companii
de tehnologie, inclusiv Netflix, Twitter, LinkedIn, AirBnB, AT&T, eBay și chiar Apple. De asemenea,
este utilizat în finanțe, de către Bloomberg și UBS.

Cum Să Detectați O Scurgere De Memorie

De ce Scala nu este (prea) popular.

În ultimii ani, Scala și-a pierdut o parte din apel, ceea ce i-a determinat pe unii să concluzioneze că
este pe cale de ieșire. Acesta este un subiect de dezbatere nu foarte mică. Deși este adevărat că
unele companii de renume l-au abandonat, Scala continuă să fie puternică și păstrează un număr
mare de persoane.

S-ar putea să vă placă și