Nim je programski jezik specijaliziran za omjer programerske produktivnosti i performansi. Uska specijalnost Nima je u mogućnosti da programe optimizira i pokreće za starije mobilne i IoT uređaje, što te programe čini šire dostupnima u zemljama trećeg i drugog-i-pol-tog svijeta poput Hrvatske.

Nim je jezik u kojem se gradi Nimbus, lagani Ethereum čvor čiji razvoj vodi Status. Cilj Nimbusa je omogućiti veću decentralizaciju Ethereum mreže time da se Ethereum tehnologija učini dostupnija slabijim uređajima.

Ovo je prvi u nizu nadolazećih članaka o Nim programskom jeziku. Prijašnje iskustvo u programiranju nije potrebno.

Instalacija i osnove

Predlažem da za korištenje Nima koristite choosenim, alat koji dopušta korištenje raznih verzija Nim jezika na istom računalu. To je vrlo korisno kod praćenja uputa iz knjiga koje referenciraju verzije koje više nisu ažurne, kao i kod testiranja Nim programa koji su pisani u verziji drukčijoj od one koju imate na svom sustavu.

Na Windows okruženju ga možete instalirati preuzimanjem neke od verzija ovdje dok je na Unix okruženju poput Mac OS X ili Linux dovoljno pokrenuti sljedeću naredbu u Terminalu i pratiti upute koje slijede:

curl https://nim-lang.org/choosenim/init.sh -sSf | sh

Nakon instalacije, najnovija stabilna verzija Nima biti će automatski aktivirana. Ako želite promijeniti verziju koja se koristi, komanda izgleda ovako:

choosenim 0.16.0

Za razvoj u Nimu predlažem korištenje besplatnog Microsoft Visual Studio Code programa s Nim dodatkom (pod dodacima pretražite “nim”).

Hello World

Prvi program u svakom novom programskom jeziku obično je “Hello World” program koji na ekran ispisuje tu poruku.

Napomena: u donjim primjerima vidjeti ćete # u nekim dijelovima koda. # je komentar u Nim jeziku, i sav sadržaj desno od tog znaka u istoj liniji smatra se komentarom – dijelom koda koji ima samo opisnu funkciju za druge programere koji čitaju taj kod.

U nekoj mapi koju ćete odrediti kao bazu svojih Nim programa kreirajte novu datoteku helloworld.nim s sljedećim sadržajem:

echo "Hello World"

Naredba echo ispisuje vrijednost na ekran. U ovom slučaju vrijednost je Hello World koji mora biti u navodnicima jer se radi o tipu podatka koji zovemo “string” tj. miješani set brojki, slova i/ili znakova. Stringovi su uvijek u navodnicima.

Zanimljivost: Zašto se string zove string?

Da ovaj program pokrenete, u toj mapi potrebno je iz komandne linije (Terminal na *nix, Git Bash / Powershell / Console itd. na Windowsima) pokrenuti:

nim c -r helloworld.nim

Ispis bi trebao izgledati ovako:

Hint: used config file '/Users/swader/.choosenim/toolchains/nim-0.19.0/config/nim.cfg' [Conf]
Hint: system [Processing]
Hint: helloworld [Processing]
CC: helloworld
CC: stdlib_system
Hint:  [Link]
Hint: operation successful (12267 lines compiled; 0.874 sec total; 16.414MiB peakmem; Debug Build) [SuccessX]
Hint: /Users/swader/nim/tutorial1/helloworld  [Exec]
Hello World
Brunos-MacBook-Pro:tutorial1 swader$ ls
helloworld  helloworld.nim
Brunos-MacBook-Pro:tutorial1 swader$ ./helloworld
Hello World

Gornji primjer izvršava se na OS X operativnom sustavu, no slični ispis trebao bi biti vidljiv i na ostalima.

Objasnimo gornju naredbu:

  1. c u nim c -r helloworld.nim znači da se program Hello World kompajlira (compile). Drugim riječima, pretvara se iz Nim oblika u efikasniji oblik C jezika. Nim se može kompajlirati u C, C++ ili JavaScript, a tvornička postavka mu je C.
  2. -r znači run, što odmah i pokreće kompajlirani program. Kompajlirani program biti će smješten u istoj mapi u kojoj smo pokrenuli naredbu. U ovom slučaju na Mac OS X sustavu zvati će se samo helloworld, i moći će ga se pokrenuti sa ./helloworld:

Ako izostavimo -r, program će samo biti kompajliran, ne i odmah izvršen. Manualno ga pokrenite pokretanjem datoteke helloworld.

Varijable

Kao i svaki drugi programski jezik, Nim podržava varijable. Varijable su “kutije” u koje možemo spremiti neku vrijednost za kasnije korištenje.

Budući da je Nim statically typed jezik (jezik s statičnim tipovima), potrebno je deklarirati koji tip varijable sprema koju vrijednost.

var myVar:string = "Hello World"
var myNum = 5;

U primjeru gore, riječ var znači “deklariram varijablu”. myVar je ime varijable, dok :string označava njen tip – u ovom slučaju string. S desne strane znaka jednakosti nalazi se vrijednost sadržana u toj varijabli: “Hello World”. Druga linija demonstrira deklariranje varijable bez tipa – Nim sam shvaća da se radi o int tipu (integer – cijeli broj), pa deklaracija nije potrebna. Ipak, radi standardizacije i čitkosti koda predlažemo da uvijek koristite tipove.

Preradimo sada naš “Hello World” program da koristi varijablu za ispis poruke.

var msg:string = "Hello World"
echo msg

Ako rekompajliramo i pokrenemo program, ispis bi trebao biti identičan kao i prije.

Fiksni Tipovi

Kada deklariramo varijablu, za vrijeme života programa možemo joj mijenjati vrijednost uz uvjet da ta vrijednost ostaje istog tipa. Primjerice:

var name:string = "Bruno"
name = "Bitfalls" # OK
name = "B" # OK
name = "" # OK
name = 5 # ERROR

Varijabla tipa string ne može postati broj (integer), ali može zaprimiti vrijednost numeričkog stringa:

name = "5" # OK

Učitavanje korisničkih unosa

Da bismo program učinili funkcionalnim, potrebno je moći primati korisnički unos. Za to nam služi funkcija readLine koja kao argument prima “standardni unos” tj. standard input – unos iz komandne linije tj. terminal programa. readLine se inače koristi i za unose drugih vrsta – datoteka, HTTP prometa s web stranica, itd. no u ovom slučaju koristimo je za čitanje iz korisničkog unosa.

var msg:string = "Hello"
echo "Unesite ime:"
var name:string = readLine(stdin)
echo msg & " " & name

U gornjem primjeru prvo definiramo varijablu msg koja ima vrijednost “Hello”. Zatim korisniku na ekranu ispisujemo poruku o tome što od njega očekujemo: “Unesite ime”. Nakon toga deklariramo novu varijablu name koja je string, kao i “Hello”, ali njoj vrijednost postavljamo na korisnički unos pomoću funkcije readLine i argumenta stdin. Drugim riječima, što go korisnik unese i zatim pritisne Enter biti će spremljeno u varijablu name. Na kraju ispisujemo cijelu poruku – više stringova može se spojiti u jedan ispis znakom &.

$ nim c -r helloworld
Hint: used config file '/Users/swader/.choosenim/toolchains/nim-0.19.0/config/nim.cfg' [Conf]
Hint: system [Processing]
Hint: helloworld [Processing]
Hint:  [Link]
Hint: operation successful (12270 lines compiled; 0.587 sec total; 16.418MiB peakmem; Debug Build) [SuccessX]
Hint: /Users/swader/nim/tutorial1/helloworld  [Exec]
Unesite ime:
Bruno
Hello Bruno

Spajanje stringova

Spajanje stringova pomoću & ispisuje njihov spoj bez da mijenja originalne unose – bez da radi promjene na samim stringovima koji bivaju spajani.

Alternativno, može se koristiti funkcija add na string objektima, ovako:

msg.add(name)

Ova se metoda od & metode razlikuje po tome što će originalni string msg biti trajno promijenjen – na njega će se trajno nadodati što god sadrži varijabla name, pa bi tako dvostruki poziv iste funckije rezultirao dvostrukim dodavanjem name na taj string, ovako:

var foo:string = "foo"
var bar:string = "bar"

echo foo & bar # "foobar"
echo foo & bar # "foobar"

var foobar:string = foo & bar
echo foobar # "foobar"

echo foo.add(bar) # "foobar"
echo foo.add(bar) # "foobarbar"

Var, let, const

Osim var, “kutije” možemo deklarirati i pomoću let i const. Obje se koriste za nepromjenjive vrijednosti, s jednom bitnom razlikom: vrijednost const spremnika mora biti popunjena prije nego pokrenemo kompilaciju, dok let može biti popunjen za vrijeme trajanja programa, ali nakon toga ne može biti promijenjen.

Naš Hello World program stoga možemo preraditi na sljedeći način:

const msg:string = "Hello"
echo "Unesite ime:"
let name:string = readLine(stdin)
echo msg & " " & name

msg je vrijednost koja se nikada neće mijenjati u našem pozdravu. Budući da ime učitavamo samo jednom, ni ono se neće mijenjati, ali mu vrijednost ne znamo prije kompilacije pa nam je potreban let.

Generalno, češće će se koristiti let nego const. Radi performansi i sigurnosti koda, predlažem da preferirate let prije var osim ako niste 100% sigurni da će se vrijednost spremnika mijenjati.

Zaključak

U ovom smo dijelu pokrili osnove Nim jezika – varijable, deklaracije, ispis i unos, te kompilaciju. U sljedećem članku objasniti ćemo tipove podataka koji se mogu koristiti u Nim jeziku i pripremiti teren za razgovor o funkcijama i petljama.

SHARE
Previous articleKako početi s Embark 3.2 frameworkom i izgraditi svoj token
Bruno ima diplomu iz engleskog jezika i književnosti i informatike, i u web developmentu i izdavaštvu je već desetak godina. U blockchain prostoru je još od 2015. Entuzijastični je igrač društvenih igara, i obožavatelj virtualne stvarnosti - nađite ga na Steamu ili Oculusu kao TheSwader. Često se nešto buni na Twitteru.

LEAVE A REPLY

Please enter your comment!
Please enter your name here