Java >> Java tutorial >  >> JDK

JavaScript-skal Dit JDK indeholder alt til ad hoc-programmering

Arbejder du på en Mac- eller Windows-desktop og installerer på en Unix/Linux-server?

Har du brug for en kommandolinjeskal?

Du er ikke ekspert i alle de forskellige skaller på alle de forskellige systemer?

Svarer du på nogle af spørgsmålene ovenfor med 'ja'?

Dette blogindlæg kan bringe dig nogle nyheder, selvom fakta om dette er ret gamle, faktisk lige så gammel som Java 6, som vil gå ud af drift til november.

Første trin

Med Java 6 introducerede Sun kommandoen jrunscript (det er kun en del af JDK, ikke JRE). Når du starter det, ser du prompten "js> ” og en venligt blinkende markør. Som Linux-bruger kan du prøve "ls ”, som Windows-bruger “dir ”. Begge kommandoer virker ikke. Vi bruger en JavaScript-skal, og navnet på en funktion i JavaScript evalueres til et funktionsobjekt. Du skal ringe funktionen:"ls() ” eller “dir() ”. Begge funktioner gør det samme – på alle operativsystemer – de viser det aktuelle mappeindhold i stil med Unix-kommandoen "ls –l ”.

Faktisk er jrunscript ikke meget mere end en indpakning omkring Java scripting API [JSR223]. Hver linje, du indtaster, behandles som et JavaScript-udtryk og evalueres. Når der er et resultat (ikke null ), toString() af dette resultat er gentaget. Det, der gør det til en skal, er sættet af foruddefinerede Java-funktioner. Sættet består af variationer af de mest almindelige Unix-kommandoer, såsom "ls ”, “cd ”, “pwd ” osv.. Det fulde sæt er dokumenteret af Oracle, se [JRUNSCRIPT]. Nogle af kommandoerne er ud over sædvanlige skalkommandoer, f.eks. du kan konvertere et XML-dokument til et DOM-træ eller udføre en Xslt-transformation.

Indtil videre har vi brugt den interaktive tilstand af jrunscript. Selvfølgelig er der også en batch-tilstand:Mulighed –f efterfulgt af et filnavn udfører filen og afsluttes bagefter. Dette kan være nyttigt til automatisering, f.eks. cron job. Sammenlignet med bash- eller cmd-scripts har JavaScript den fordel, at operativsystemet er uafhængigt. Derudover vil du i næsten alle Java (web) projekter finde en fyr, der taler JavaScript. Det kan være sværere at finde bash-ekspertise.

Ad hoc-programmering

Et programmeringssprog skal bruges til … programmering! I tilfældet med jrunscript er dette for det meste programmering af engangs-one liners. Lad os antage, at build-mappen skal renses (og dit build-script savner et rent mål). Dette kan gøres med find('.', '.*\.class', rm) . Den første parameter for find er startmappen (her den aktuelle mappe). Det andet er et regulært udtryk for filnavnet (uden sti, her matcher det alle klassefiler). Den sidste er den mest interessante:Et tilbagekald, som kaldes med det absolutte filnavn for hver matchende fil.

Tilbagekald i JavaScript kan være funktionsobjekter (skriv blot funktionsnavnet) eller anonyme funktioner. Eksemplet ovenfor bruger den indbyggede funktion rm . Et eksempel med en anonym funktion (lambda-udtryk) følger; den finder alle Java-filer, hvor det absolutte filnavn består af mere end 60 tegn. Du har muligvis brug for en lignende funktion, når du porterer dit projekt til et begrænset operativsystem...

find('.', '.*\.java', function(x) { if (x.toString().length() > 60) echo(x) })

Der er ingen hjælpefunktion, når du har brug for dokumentationen, brug din browser eller kildekoden. Opkaldet echo(rm) udskriver JavaScript-definitionen af ​​den indbyggede funktion rm . Den komplette kildekode for alle funktioner er indeholdt i tools.jar , fil com/sun/tools/script/shell/init.js .

Hver indtastet linje udføres med det samme, hvis den ikke består af et eller flere komplette udtryk, svarer jrunscript med en syntaksfejl. Men der er en måde at evaluere mere end én linje på, brug read() kombineret med eval: return eval(read('>', true)) . Den første parameter i read er prompten, den anden siger, at du vil læse mere end én linje. read() stopper, når du indtaster en tom linje.

Batch-tilstand og udvidelse af sæt indbyggede kommandoer

Ud over online eksekvering af indtastede kommandoer, kan jrunscript bruges i batch-tilstand:Brug muligheden –f efterfulgt af scriptnavnet. Der kan være mere end én –f , så det er muligt at udføre mere end ét script med det samme miljø. Dette giver dig mulighed for at kombinere batch og interaktiv tilstand. Brug først –f med et scriptnavn efterfulgt af –f med et minustegn i stedet for et filnavn. Minustegnet står for standardinput, så efter udførelse af scriptet/scripterne er det muligt at udføre flere udtryk interaktivt.

Dette giver dig mulighed for at udfylde JavaScript-navneområdet med nogle af dine egne objekter og/eller funktioner. Husker du flerlinjeproblemet fra sidste kapitel? Tilføj linjen

function ml() { return eval(read('>', true)) }

til dit opstartsscript, og du kan bruge din egen funktion ml() når du vil indtaste udtryk længere end én linje.

Oversigt

jrunscript er ret anderledes sammenlignet med andre kommandolinjeskaller. Syntaksen kræver mere indtastning, f.eks. funktioner skal kaldes med parentes. I de fleste skaller skal du angive variable (med et $-tegn), i jrunscript skal du citere strenge. Som en fordel er adfærden nemmere at forstå sammenlignet med en Unix bash. Der er ingen overraskelser forårsaget af et mellemrum i et filnavn, og det er næsten ikke nødvendigt at citere specialtegn.

Hvordan er jrunscript sammenlignet med en JavaScript-konsol i din browser? Begge bruger det samme sprog, men miljøet er ret anderledes:I browseren har du objekter som doc eller window , i jrunscript har du Java-broen (se [JSGUIDE] for flere detaljer) og den fulde kraft af klasserne i din jdk. Det er endda muligt at sætte yderligere krukker til klassestien.

Denne artikel dækker kun en meget lille del af, hvad du kan gøre med JavaScript-fortolkeren i JDK. En funktion, der ikke vises her, er Java-broen, som giver dig mulighed for at bruge vilkårlige Java-klasser i JavaScript.

En script-shell er ingen erstatning for byggeværktøjer som ant, maven eller gradle, men det er praktisk, når du har brug for en lille smule logik og ikke vil starte din Java-compiler. Så måske vil det fylde en niche i dit liv som udvikler.

Et sidste ord:Når du er træt af jrunscript:quit()


Java tag