Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene kommer inn i programmet, og kan behandles der? Veiledningen er laget for studenter som bruker boken Objektorientert programmering med Java, ISBN 82-7674-748-5. Noen av oppgavene og løsningsforslagene er laget slik at det skal transporteres data fra kommandolinjen og inn til programmet. Dataene skal være på kommandolinjen i det øyeblikket programmet starter. Det er altså for sent å hente inn dataene etterpå ved å bruke read-setninger for tastaturet. Ett av problemene for studenter på dette trinnet er altså å forstå at i dette tilfellet skal det ikke brukes Konsoll.readLine-setninger eller tilsvarende. Denne veiledningen beskriver to miljøer som brukes for å håndtere kommandolinjen. CMD Det ene miljøet er kommandolinjevinduet i Windows. Dette startes som regel fra Start-menyen. Avhengig av om man bruker Vista, XP eller Windows 7, startes kommandovinduet på litt ulike måter. Men alle måtene ender med at du før eller senere skriver cmd og trykker enter. Dermed kommer et lignende bilde fram: Den rette streken helt sist i dette vinduet pleier å blinke for å tiltrekke seg oppmerksomhet. Streken kalles for skrivemerke, fordi det er meningen å skrive noe der. Vanligvis skriver man navnet på et
program. Når man har gjort det, og trykket enter, starter programmet dersom alle forutsetninger er tilstede. Eclipse Det andre miljøet er Eclipse. Dersom man er vant til CMD, kan man oppleve at Eclipse gjør det enklere å bruke argumenter, fordi man ikke trenger å forlate det grafiske miljøet i Eclipse. Men dersom man ikke fra før vet noe om kommandolinjemiljøer som CMD, vil man kanskje i stedet tenke at verktøyet for å simulere kommandolinje i Eclipse er vanskelig. Verktøyet for å simulere CMD i Eclipse er avansert. I denne veiledningne skal vi kun se på det som er helt nødvendig for å forstå hvordan det skal brukes i oppgavesammenheng. Fordi verktøyet er avansert, ser det litt forskjellig ut avhengig av hva man vil gjøre. Verktøyet ser for eksempel slik ut: For å åpne denne dialogen med omtrent dette utseendet, må man først kjøre Teststakk en gang. Deretter kan man kjøre run configurations, enten ved å klikke på verktøyknappen, eller ved å velge det fra run-menyen. Ordet run er i dette tilfellet et substantiv, ikke et verb. Det er altså kjøretilpasninger dette handler om.
Bruk av argumenter på kommandolinjen Hvis man bruker argumenter på kommandolinjen, er det ofte for å stille inn et program. Dette er det samme som å påvirke programmet slik at det kjører på en bestemt måte. I oppgavene i boka kan du for eksempel oppleve lignende ting som at du må skrive java Gangetabell 5 for å skrevet ut fem-gangen, eller java Gangetabell 7 for å få skrevet sju-gangen. Disse to eksemplene viser bruk av henholdsvis 5 og 7 som argumenter. Med programmet Teststakk kan det hende du vil skrive java Teststakk mandag tirsdag onsdag torsdag. I dette tilfellet er det mandag tirsdag onsdag torsdag som er argumenter. Du skal løse oppgaven slik at programmet kjører, og slik at det svarer med å skrive ut torsdag onsdag tirsdag mandag Det er slik dette programmet skal virke når du har løst oppgaven med å skrive klassen Stakk. Etter denne omvendte utskriften stopper programmet av seg selv. Argumenter og kjøring med cmd Dersom du bruker cmd vil dette se slik ut: Her er det ikke vist hva som skjer etter at du trykker på enter-tasten. Forhåpentligvis er det likevel klart nok hva som vil skje, ut fra det som er beskrevet ovenfor. Det krever ofte en del tålmodighet og innsikt å tilrettelegge for å kjøre programmer fra kommandolinjen. Derfor bruker vi som regel Eclipse i sammenheng med kurs og opplæring.
Argumenter og kjøring med Eclipse Du vil vanligvis bruke Eclipse i stedet for cmd, men kan ha godt av å vite hvordan det ville sett ut i cmd. I boken er det tatt utgangspunkt i cmd, eller tilsvarende kommandolinje, siden dette er mindre avhengig av spesielle verktøy. I dette avsnittet skal vi se på hvordan du kunne lagt inn argumenter ved hjelp av Eclipse. For å finne ut hva som er gjort, må du studere dialogen ovenfor, Run Configurations. I kolonnen til venstre er klassen Teststakk i fokus. Grunnen er at Teststakk er entry point. Klassen som er entry point, er den klassen som inneholder metoden main. I dialogen Run Configurations er det forholdene ved entrypoint og igangkjøring som tilpasses. I det store panelet til høyre er det øverst presisert at navnet på denne konfigurasjonen er Teststakk. Dette navnet er valgt fordi det er lett å huske. Navnet på konfigurasjonen er altså blitt det samme som navnet på klassen med entrypoint, fordi det er lett å huske.
Rett under er det en rekke med såkalte fliker eller faner. Ved å åpne fanen med (x) Arguments kan du skrive inn argumenter som du ellers måtte åpnet kommandolinjen for å skrive inn. Som du ser, er det her skrevet inn argumentene mandag trisdag onsdag torsdag, akkurat slik du ville gjort det på kommandolinjen. Men du trenger ikke sette java Teststakk foran, fordi dette allerede er konfigurert et annet sted i denne dialogen. Når du er ferdig med å konfigurere (i dette tilfellet, med å skrive inn argumenter) kan du klikke på apply eller run. I begge tilfeller blir konfigurasjonen lagret, og virker som default neste gang du klikker på den grønne run knappen. Ordet default betyr i denne sammenhengen den vanlige. Fange argumentene Hvordan fanges argumentene i programmet? Med andre ord: hvordan får programmet tak i argumentene? Argumenter fra kommandolinja fanges i entry point. Du har sikkert lagt merke til at alle entrypoint skrives slik: static public void main(string[] args) { } // forskjellig slags kode som starter opp eller kjører selve programmet Ordene static og public har tilfeldig rekkefølge. Ordet args er et ord vi kan finne på selv. Resten av teksten i den første linjen må stå akkurat som det står for at dette skal være et gyldig entrypoint. Det at det må stå på nøyaktig en bestemt måte, kalles for en signatur. Som du ser er args av typen String[]. Det betyr altså at argumentene kommer inn gjennom parentesen i entrypoint under det navnet vi selv velger å sette på dem. Men typen kan vi ikke bestemme selv. Den er alltid av typen typen String[] (altså et array fylt med strenger). Eksemplet Teststakk I oppgaven der du må bruke klassen Teststakk er argumentobjektet ikke kalt args. Det er i stedet kalt s. Vi kan altså kalle dette objektet hva vi selv vil. Selv om objektet s inneholder for eksempel fire argumenter fra kommandolinja, kalles selve objektet s også for et argument. Grunnen er at det er argument for konstruktøren. Setningen Stakk stakk = new Stakk(s);
er altså en setning som instansierer objektet stakk, og bruker argumentet s i selve instansieringen. Meningen må være at objektet stakk skal bruke argumentene fra kommandolinja til noe. I koden kan du også lese at objektet stakk skal forstå meldingen next. Meningen skal være enkel å tolke ut fra navnet på meldingen, nemlig at objektet skal komme med neste argument. I eksemplet vårt med ukedager, er det slik at den aller første gangen next brukes, er det argumentet torsdag som kommer. Grunnen til at det er det siste argumentet som kommer først, er at objektet er av typen Stakk. Meningen med ordet stakk er jo at elementer tas ut i omvendt rekkefølge, som fra en tallerkenstabel. Begrepet stack er et ekte teknisk uttrykk. Prinsippet stammer fra et annet teknisk begrep, nemlig last-in-first-out. Dette forkortes som regel til LIFO, og er et kjent begrep både i databehandling og digital elektronikk. Slutt på dokumentet