Kuudennet tehtävät – Hei maailma -ohjelma kolmella eri kielellä

Tämän viikon tunnilla tutustuimme bash-skriptien tekoon ja koodasimme muutaman pienen ohjelman Pythonilla. Kotitehtäväksi saimme Hei maailma -ohjelman kirjoittamisen kolmella eri kielellä ja siten myös tarvittavien ohjelmointiympäristöjen asennuksen. Opettajamme mainitsi, että hyvät kielet valittavaksi olisivat esimerkiksi Java, C ja Go, joita aionkin nyt yrittää. Taidan lähteä liikkelle Javasta, sillä se on edellisistä kielistä ainoa, josta minulla on kokemusta.

Hello World Javalla

Normaalisti olen koodannut Javaa Eclipsellä, joten minun ei ole tarvinnut aikaisemmin asentaa Java-ympäristöä komentoriviltä käsin. Ongelmaksi ensin muodostuikin oikean paketin valitseminen. Vaikka olen törmännyt JRE- ja JDK-lyhenteisiin aikaisemminkin, en enää muistanut, mitä eroa niillä oli. Tästä Stackoverflow-keskustelusta päättelin, että minun tulisi asentaa juuri JDK, sillä tarkoituksenani on luoda itse Java-ohjelma. JDK-pakettejakin kuitenkin vaikutti olevan montaa eri sorttia, joten päädyin googlettamaan myös asennusohjeet. Tämän jälkeen annoin ensimmäiseksi komennon

$ sudo apt-get update
$ sudo apt-get install default-jdk

ja asennuksen päätyttyä varmisin asennuksen onnistuneen komennolla

$  java --version

, joka tulosti terminaaliin seuraavat tiedot:

openjdk 10.0.2 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)

Kaikki vaikutti olevan kunnossa ja seuraavaksi oli vuorossa itse ohjelman kirjoittaminen. Kuten aikaisemmin totesin, olen tähän mennessä koodannut Javaa Eclipsellä, joka huolehtii yleensä luokkien ja main metodien luomisesta, joten rehellisesti sanottuna en muista ulkoa, kuinka ne nyt menivätkään. Muistan vielä public static void main-rimpsun mutta args-kohtaan mennessä hyydyn pahasti. Pienen lunttaamisen jälkeen sain kuitenkin ohjelman kirjoitettua:

Seuraavaksi vuorossa oli ohjelman testaaminen. En ollut varma siitä, miten tämä tapahtuu, mutta Python-ohjelmien pyörittämisestä tuttua logiikkaa soveltaen kokeilin ensimmäiseksi komentoa

$ java HelloWorld.java

Tämä kuitenkin tuotti seuraavanlaisen virheilmoituksen:

Error: Could not find or load main class HelloWorld.java
Caused by: java.lang.ClassNotFoundException: HelloWorld.java

En ollut täysin varma mistä tämä johtui, joten palasin taas Stackoverflown hellään syleilyyn. Sainkin selville, että Java-ohjelmat pitää ennen ajamista kääntää, ja tämä hoituu minun tapauksessani komennolla

$ javac HelloWorld.java

Tämän jälkeen yritin uudestaan käyttää aikaisemmin syöttämääni komentoa, mutta tämä tuotti taas saman virheilmoituksen. Ilmeisesti komentoon ei siis voi laittaa tiedostopäätettä, vaan oikea komento on yksinkertaisuudessaan

$ java HelloWorld

Tämän jälkeen konsoliin tulostuu vihdoinkin Hello World!

Hello World C:llä

En ole koodannut C:llä aikaisemmin, joten lähdin suosiolla liikkeelle asennusohjeiden etsimisellä. Yllätyksekseni annettuani komennon

$ gcc --version

sainkin tietää, että Xubuntullani onkin jo näemmä C-ohjelmien tarvitsema kääntäjä. Saatoinkin siis siirtyä suoraan koodaamiseen, tai tässä tapauksessa lähinnä copy-pasteamiseen.

En oikein tiennyt, mitä ensimmäisen rivin stdio.h tarkoittaa, joten yritin ottaa asiasta selvää. Ilmeisesti stdio.h tuo mukanaan useampia valmiita funktioita, esimerkiksi tässä koodissa esiintyvätn printf-funktion. Javasta poiketen C:n main-metodi palauttaa int-arvon 0, jonka epäilen tarkoittavan sitä, että ohjelma suoritettiin onnistuneesti. Muistelen nähneeni error-viestejä, joissa on sanottu, että ohjelma sai palautusarvokseen 1.

Myös C-ohjelmat täytyy kääntää ennen ajamista, mikä tapahtuu komennolla

$ gcc -o hello helloworld.c

, jossa -o gcc:n manuaalin mukaan tarkoittaa, että komennon output laitetaan tiettyyn tiedostoon, jonka nimi tässä tapauksessa on hello. Tämän jälkeen ohjelman voi ajaa kuvan osoittamalla tavalla:

Kiinnostavaa on, että Hello, World! -teksti tulostuu terminaali-promptin kanssa samalle riville.

Hello World Go:lla

Tunnistan useita ohjelmointikieliä nimeltä, mutta tämä taitaa olla ensimmäinen kerta kun ylipäätäänsä kuulen Go:sta. Voi toki olla, että olen unohtanutkin, tai ehkä olen sivuuttanut maininnat siitä, sillä en ole tunnistanut kielen nimeä. Ensi töikseni päätinkin siis selvittää, millainen kieli Go yleisesti ottaen on. Tämän Wikipedia-artikkelin mukaan Go vaikuttaa ainakin olevan Javaan ja C:hen verrattuna huomattavasti uudempi kieli, mutta ei kuitenkaan niin uusi, että epäilisin sen selittävän, miksi en ole kuullut siitä aikaisemmin.

Yleisen perehtymisen jälkeen siirryin etsimään tietoa asennuksesta. Suurin osa aluksi löytämistäni Go:n asennusohjeista vaikutti epäilyttävän monimutkaisilta, mutta tältä sivulta löysin ohjeet Go:n asentamiseen Ubuntun repositorioiden avulla. Aloitinkin siis antamalla asennuskomennon

$ sudo apt-get install golang

ja varmistamalla asennuksen onnistumisen komennolla

$ go version

, joka tulosti seuraavan rivin:

go version go1.10.4 linux/amd64

Asennus vaikutti siis onnistuneen. Seuraavaksi vuorossa oli Go:n polun määritteleminen. Annoin komennot tismalleen samanlaisina kuin ohjeissa:

$ echo 'export GOPATH=$HOME/go' >> ~/.bashrc  
$ echo 'export PATH=${PATH}:${GOPATH}/bin' >> ~/.bashrc
$ source ~/.bashrc

Ohjeissa neuvottiin myös testaamaan go:n toimintaa valmiilla GitHubista löytyvällä Hello World -tiedostolla seuraavien komentojen avulla:

$ go get github.com/golang/example/hello
$ hello

Sainkin tulosteeksi

Hello, Go examples!

, kuten oli tarkoituskin. Täytyy sanoa, että go get url -muotoinen komento on kyllä aika hauska.

Go:n toiminnan varmistettuani siirryinkin siis tekemään omaa paikallista HelloWorld-ohjelmaa. En tiedä Go:n syntaksista mitään, joten päädyin jälleen kerran googlettamaan esimerkin.

Go:n versio C:n stdio.h:sta vaikuttaa olevan fmt. Main-metodin paluuarvoa ei ole nähdäkseni määritelty ollenkaan, mikä ainakin poikkeaa sekä Javasta että C:stä.

Javasta ja C:stä poiketen Go-ohjelmaa ei ilmeisesti ole pakko kääntää, vaan ohjelma voidaan suoraan ajaa komennolla

$ go run helloworld.go

Jos tiedostosta kuitenkin haluttaisiin ensin rakentaa suoritettava ohjelma, joka ajettaisiin, tämä tapahtuisi seuraavilla komennoilla:

$ go build hello-world.go
$./hello-world

Siinä olivatkin tämän viikon tehtävät! Vapaaehtoisina tehtävinä olisi ollut ns. oikeiden ohjelmien tekemistä kolmella eri kielellä, mutta en taida ryhtyä siihen nyt. Ilmoittautuin hiljattain CampusOnlinen kautta useille nonstop-kursseille, joita voi suorittaa omaan tahtiin vuoden 2019 aikana. Tavoitteenani olisikin kesän aikana perehtyä useisiin itselleni joko kokonaan uusiin tai melko vieraisiin ohjelmointikieliin (C, C#, C++, Ruby, PHP, Python) ainakin alkeiden tasolla. Jätänkin syvällisemmän uusiin kieliin perehtymisen siis suosiolla hieman myöhemmäksi ja siirryn nauttimaan tällä jaksolla arvoon arvaamattomaan nousseesta vapaa-ajastani.

// Edit1: Argh, olin laittanut itselleni ylös opettajamme kirjoittaman artikkelin, joka olisi helpottanut tämän harjoituksen tekemistä valtavasti, mutta unohdin käyttää sitä!

Tietoa kirjoittajasta

Noora Huttunen

Opiskelen ohjelmistotuotantoa Haaga-Helian tietojenkäsittelylinjalla.