Fra null til hei verden i Scala

Scala er et av de mest attraktive programmeringsspråkene akkurat nå. Det er mye sprøytenarkoman rundt det, og programmører over hele verden anerkjenner det som en mulig neste stor ting i programmeringen. Her er hvorfor. Scala handler om funksjonell programmering i en objektorientert kontekst. Det forsøker å ta det beste fra begge verdener og kombinere dem til et svært effektivt, intelligent og relativt lett å forstå språk. Akkurat nå er det lederen i dagens renessanse av funksjonelle programmeringsspråk.

Jeg har nylig avsluttet Martin Odersky's Scala kurs og jeg fant det veldig vanskelig å finne ut hvordan jeg skulle komme i gang. Du vet det første trinnet når du vil starte kodingen, men du vet ikke hvilke verktøy som står til din disposisjon, hvilken IDE du skal bruke, eller hvilken enhetstestramme som skal velges. Denne opplæringen vil være om deg, nykommeren til Scala, forbereder utviklingsmiljøet ditt slik at du kan komme i gang lettere.


Puslespillene

Her er puslespillene vi snakker om i denne leksjonen, vær så snill å hoppe over de du allerede kjenner:

  • Enkle byggverktøy (SBT) - Dette er verktøyet som genererer prosjekter, avhengigheter, etc. for Scala
  • NetBeans med Scala Plugins - hvordan å integrere Scala med NetBeans
  • Hei Verden - vi lager vår første scala kildefil
  • Scalatest - Den anbefalte enhetstestrammen for Scala

Vi tar hvert emne på listen og diskuterer det på nybegynnernivå, og til slutt ser vi hvordan alle disse delene fungerer sammen.


Programvarekrav

Før du begynner, sørg for at du har den nyeste Java SDK installert på datamaskinen. Siden Scala kjører på Java Virtual Machine (JVM), er SDK kreves. Resten av emnene på vår liste kan kreve Java SDK, enten direkte eller indirekte, så det er godt å ha.

Du trenger ikke å ha Scala selv installert. Vi snakker om dette i neste kapittel.


Scalas Simple Build Tools (SBT)

Hvis du er en PHP-utvikler, er du sannsynligvis kjent med komponisten. Hvis du er en Ruby guru, kjenner du og elsker Bundler. Hvis du programmerer på et annet språk, er jeg sikker på at det også er en pakkeleder for det.

SBT ligner de ovennevnte pakkelederne, men mens Composer krever at du har PHP forhåndsinstallert på samme måte som Bundler trenger Ruby, trenger Scala ikke installeres på systemet før du kan bruke SBT. Faktisk kan den spesifikke Scala-versjonen du vil bruke for prosjektet, enkelt angis som en avhengighet i SBT. Du lurer kanskje på hvordan dette er mulig. Som jeg nevnte før, går Scala på JVM; i utgangspunktet er det bare et Java-bibliotek. Pakken for Scala kan også være enkle .jar-filer. Så, SBT, selv, er bare et Java-program. Du trenger bare Java, som du sannsynligvis allerede har uansett.

Det er mange forskjellige måter du kan tilnærming til å installere SBT. For grunnleggende grunner mellom Linux, Mac og Windows, er min foretrukne måte å installere SBT bare for å ta arkivet, sett det i en katalog, trekk det ut i min hjemmekatalog, og legg til banen til systemet.

En plattform uavhengig måte å installere SBT på

Last ned den siste stabile SBT fra det offisielle depotet. Se etter en mappe uten en "Beta" eller "R" eller "M" på slutten. Det vil være den stabile versjonen. I øyeblikket du skriver denne opplæringen, er den siste stabile versjonen 0.12.3.

Arkivet inneholder en sbt katalog inni det. Bare trekk ut dette til din favorittplassering. Jeg foretrekker at det er et sted i min hjemmekatalog som / Home / Csaba / Programmering / Scala / sbt

Deretter legger du banen til SBT bin-katalogen din, til PATH-variabelen. På UNIX-lignende systemer, hvis du bruker Bash, legg til en linje som dette på din ~ / Bash_profile eller ~ / .Bashrc fil:

PATH = $ PATH: $ HOME / Programmering / Scala / sbt / bin eksport PATH

De $ HOME variabel peker vanligvis på hjemmekatalogen din. Du kan bruke den på nytt i konfigurasjonsfilene dine. Windows-brukere kan ha en annen variabel for dette. Ikke glem det eksport kommandoen på den andre linjen, ellers din STI variabel vil bare være tilgjengelig i konfigurasjonsfilen.

Nå, test at SBT-installasjonen var vellykket. Åpne et konsoll- eller kommandolinjeverktøy og skriv inn:

$ sbt - versjon sbt launcher versjon 0.12.2

De $ tegn er Bash-spørringen, resten er kommandoen som du vil skrive inn. Som du kan se, har jeg versjon 0.12.2 installert.

For andre måter å installere SBT, kan du sjekke den offisielle oppsettdokumentasjonen.

Opprette et nytt prosjekt

Opprett en mappe hvor du vil at fremtidig kode skal være, åpne en konsoll, endre til den nylig opprettede katalogen, og kjør bare kommandoen sbt.

csaba @ csaba ~ / Personlig / Programmering / NetTuts / Fra null til Hello World in Scala / Kilder $ sbt [info] Laster globale plugin fra /home/csaba/.sbt/plugins [info] Oppdaterer file: / home / csaba / .sbt / plugins / default-e430ed ... [info] Løsning org.scala-sbt # precompiled-2_10_0; 0.12.2 ... [info] nedlasting http://repo.typesafe.com/typesafe/ivy-releases/org. scala-sbt / actions / 0.12.2 / glass / actions.jar ... [info] [SUCCESSFUL] org.scala-sbt # actions; 0.12.2! actions.jar (3648ms) [...] Mange flere nedlastinger her [info] [SUCCESSFUL] org.scala-tools.testing # test-grensesnitt; 0.5! Test-interface.jar (239ms) [info] Ferdig oppdatering. [info] Angi nåværende prosjekt til standard-f502c6 (i byggefil: / home / csaba / Personal / Programmering / NetTuts / Fra% 20Zero% 20to% 20Hjel% 20World% 20in% 20Scala / Kilder /)>

Merk at det nåværende prosjektet ble satt til mappen du er inne, og at konsollen din er endret. Du er nå inne i SBT-konsollen. Du kan forlate denne konsollen ved å trykke CTRL + d eller CTRL + c eller ved å utstede kommandoen exit.

I denne konsollen kan du fortelle SBT å gjøre mange ting. Bare trykk TAB to ganger og bekreft med y for å se den komplette listen over tilgjengelige kommandoer.

Prosjektbasert byggkonfigurasjon

Å bruke systemets brede eller brukerbrede innstillinger for alle dine prosjekter er kanskje ikke det beste alternativet. Hvert prosjekt er annerledes, det trenger forskjellige avhengigheter, har et annet navn og så videre. For å fortelle SBT om informasjon som dette, må vi opprette en fil som heter build.sbt. Den må plasseres i prosjektets rotmappe, som du finner på den siste linjen, i forrige eksempel.

Språket som brukes i disse filene er en DSL som ligner Scalas syntaks, men mye mindre komplekst. For å holde det enkelt, definerer du vanligvis bare noen verdier som prosjektets navn og versjon eller avhengigheter, for eksempel hvilke Scala- eller SBT-versjoner som skal brukes. Navnene på disse verdiene kalles "nøkler". Vi jobber med bare noen få av dem. Sjekk ut Keys.scala-siden for en komplett liste over nøkler.

For vårt prosjekt spesifiserer vi bare fire nøkler. Deres navn gjør dem ganske selvforklarende:

navn: = "Hellow World" versjon: = "1.0" scalaVersion: = "2.10.1" sbtVersion: = "0.12.3"

Vær veldig forsiktig med tomme linjer i konfigurasjonsfilen. Hver nøkkelverdisdefinisjon må skilles av en tom linje. Kjør nå sbt oppdatering i prosjektets katalog.

$ sbt oppdatering [info] Laster globale plugins fra /home/csaba/.sbt/plugins [info] Sett nåværende prosjekt til Hellow World (i bygningsfil: / home / csaba / Personal / Programming / NetTuts / From% 20Zero% 20to% 20Hello% 20World% 20in% 20Scala / Kilder /) [info] Oppdatering fil: / home / csaba / Personal / Programming / NetTuts / Fra% 20Zero% 20to% 20Hello% 20World% 20in% 20Scala / Kilder / default-f502c6 ... [info] Løsning org.scala-lang # scala-bibliotek; 2.10.1 ... [info] Ferdig oppdatering. [suksess] Total tid: 1 s, ferdig 13. mai 2013 08:17:54 $ sbt [info] Laster globale plugins fra /home/csaba/.sbt/plugins [info] Sett nåværende prosjekt til Hellow World (i bygg fil: / home / csaba / Personal / Programmering / NetTuts / Fra% 20Zero% 20to% 20Hjel% 20World% 20in% 20Scala / Kilder /)> sbt-versjon [info] 0.12.3> scala-versjon [info] 2.10.1 > avslutte

Som du kan se, ble Scala 2.10.1 automatisk valgt og lastet ned om nødvendig. Vi har også oppdatert SBT til 0.12.3 on-the-fly. Til slutt vil du legge merke til at det kaller vårt prosjekt ved navn når du laster inn: "Sett nåværende prosjekt til Hellow World".

Katalogstrukturkonvensjoner i SBT

Selv om du ganske enkelt kan legge alle kildefilene dine inn i prosjektets rotkatalogen, anbefaler SBT og bruker, etter konvensjon, en katalogstruktur som ligner Maven. La oss oppdatere katalogene våre slik at de ser ut som treet nedenfor. Du bør bare opprette src katalog og dets barn, resten ble generert da vi spilte med SBT-kommandoene. Hvis de ikke var det, ikke bekymre deg, du er bare interessert i src katalog.

├── prosjekt │ └─ - mål │ └─ - config-klasser ├── src │ ├── main │ │ ├── ressurser │ │ └─ - skala │ └── test │ ├── ressurser │ └─ ─ scala └── target

Integrering av Scala, SBT og NetBeans

Nå som vi har lært grunnleggende om SBT, trenger vi en IDE for å skrive vår kode. Hvis du foretrekker å bruke enkle redaktører, som Sublime Text, kan du gjøre det og hoppe over dette trinnet.

NetBeans har støttet Scala lenge før SBT. Det er et plugin kalt "nbscala" som kan skape Scala-prosjekter for NetBeans og bruke Scala-språket installert på systemet. For øyeblikket overgår denne plugin til SBT og vil til slutt ha muligheten til å opprette og administrere SBT-prosjekter.

For tiden integrerer SBT og NetBeans ganske bra. Det eneste du må opprette manuelt når du skriver denne artikkelen er det første SBT-prosjektet. Etterpå kan NetBeans integrere med det pent.

Installere Scala Support i NetBeans

La oss åpne NetBeans, gå til Verktøy / Plugins, velg Tilgjengelige plugger og bla ned til brevet S. Sjekk alle pluginene relatert til Scala, klikk Installere og la den installere pluginene med alle nødvendige avhengigheter.


Hvis du er nysgjerrig på hvordan dette pluginet er skrevet, kan du sjekke Github-depotet.

Installere NetBeans Support i SBT

Ja, du har lest det riktig, SBT har sitt eget plugin-system som kan generere NetBeans-prosjekter for deg. Du må bare sjekke ut et git repository og publisere det lokalt. Endre til en katalog der du vil at pluginet skal sjekkes ut og installeres, og kjør deretter følgende kommandoer:

git klone [email protected]: dcaoyuan / nbsbt.git cd nbsbt sbt ren kompilere publish-local

Ok, vi er nesten ferdige. Vi har plugin, nå må vi fortelle SBT å bruke den. Du kan gjøre dette per prosjekt hvis du ønsker det, men jeg anbefaler at du legger til det i brukerens SBT-innstillinger: ~ / .Sbt / plugins / plugins.sbt

De ~ refererer til din hjemmekatalog, bør du allerede ha en katalog kalt .sbt i det (merk prikken som det første tegnet). Du kan eller ikke har en plugins katalog, hvis du ikke gjør det, bare opprett det og opprett deretter plugins.sbt fil. Legg nå følgende til:

addSbtPlugin ("org.netbeans.nbsbt"% "nbsbt-plugin"% "1.0.2")

Det er det, nå kan SBT generere NetBeans-prosjekter for deg når du kjører NetBeans kommando i SBT-konsollen. Alternativt, i NetBeans, kan du bare åpne (ikke nytt prosjekt, men åpne) et hvilket som helst SBT-prosjekt, og det vil automatisk generere NetBeans ting for deg.


Da vil alle prosjektavhengighetene bli oppdatert og NetBeans kommandoen vil bli kjørt i en SBT-konsoll, inne i NetBeans.


Nå ser du kanskje mer tekstrulling på skjermen avhengig av avhengighetene som trengs for å bli installert, og du bør kunne se at NetBeans kommandoen ble automatisk løp for oss.

I venstre rute, på prosjektleser fan, kan du til og med kjøre grunnleggende SBT-kommandoer ved å ganske enkelt høyreklikke på prosjektet og kjøre Last, Ren, Kompilere og så videre.


Hei verden i Scala

Nå er dette ikke en veiledning for å lære Scala. Vi vil bare skrive noen veldig grunnleggende kode, en klassisk Hello World. Så, du kan fortsette å utvide ditt Scala-prosjekt og i "Scala Packages" -oppføringen, høyreklikk på og velg Nytt -> Scala objekt. Gi det et navn, noe som "HelloWorld" vil gjøre like bra. Deretter inn i det, skriv inn følgende kode:

objekt HelloWorld def main (args: Array [String]) = println ("Hello World!")

Hvis du er helt ukjent med Scala, kjøres et objekt automatisk og en metode kalles hoved- vil bli sett opp. Metodens definisjon er bare en enkel utskriftslinje av Hei Verden.

Gå til SBT-konsollen for dette prosjektet - hvis du lukket det ved en feil, bare høyreklikk på Scala-prosjektet i venstre rute og velg Åpne sbt-konsollen. Skriv nå løpe i konsollen, for å kjøre programmet.



Legge til prøver

Det første trinnet er å installere Scalatest slik at vi har en testramme. Den enkleste måten å gjøre dette på er å redigere vår build.sbt fil og legg til følgende linje; husk at du må legge en tom linje mellom hver linje.

libraryDependencies + = "org.scalatest" %% "scalatest"% "1.9.1"% "test"

Nå, i SBT-konsollen kan du utstede en oppdatering (valgfritt) og kjøre test kommando. Vi har ikke noen tester ennå, så kommandoen bør ikke mislykkes.


Å lage vår første test vil være ganske enkelt. Det eneste du må vite er at det må være i src / test / scala mappe. Eller, hvis du utvider Scala testpakker i prosjektviseren din og høyreklikk på , du kan velge Ny -> Scala klasse og opprett en med navnet "ExampleSuite" og legg til koden under:

import org.scalatest.FunSuite class EksempelSuite utvider FunSuite test ("test 2 forventede verdier er like") assert (2 === 2) test ("test 2 verdier er forskjellige og mislykkes") assert (2 == = 3)

Vær oppmerksom på at NetBeans kan ha noen problemer med å kjøre testene dine, da Scala-pluginet ikke er ferdig ennå. Men ikke panikk, du kan fortsatt kjøre testene fra SBT-konsollen.

Testen importerer bare Scalatest testpakken FunSuite (hvor "moro" kommer fra funksjonell) og kjører to tester. Som du kan finne ut av koden, vil den første passere, den andre vil mislykkes.


Hvis SBT av en eller annen grunn nekter å kompilere tester, bare lukk konsollen i NetBeans, høyreklikk prosjektet og velg Oppdater sbt Prosjekt. Dette løser problemet, og testene dine vil kjøre som forventet.


Siste tanker

Der går du! Du har nettopp fullført dine første skritt mot å lære Scala. Jeg håper denne opplæringen har hjulpet deg til å bedre forstå hvordan du kommer i gang. Hvis du i stedet for å bruke Netbeans, som er min foretrukne IDE, kan du også gjøre et Google-søk for å finne ganske komplett online dokumentasjon om hvordan du bruker SBT og Scala med Eclipse, hvis det er det du foretrekker.

Takk for at du leste.