Redigerer
REXX
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
{{referanseløs}} {{infoboks programmeringsspråk}} '''Rexx''' er et [[Prosedyrisk programmering|prosedyralt]] [[programmeringsspråk]] med en engelsklignende [[Syntaks (programmering)|syntaks]]. Språket ble utviklet av Mike Cowlishaw hos [[IBM]] i 1979.<ref>{{ Kilde_www|url=http://www.rexxla.org/rexxlang|tittel=The Rexx Language Association - What is Rexx?|besøksdato= 2009-01-09 }}</ref> Det var i starten brukt på IBMs stormaskinsystem [[CMS (Operativsystem)|CMS]], men ble også populært som innebygget skriptspråk i [[Commodore International|Commodore]] sitt [[Amiga]] operativsystem og IBMs [[OS/2]]. Det har også tidvis vært brukt som makrospråk i andre applikasjoner, hovedsakelig på OS/2 og Amiga hvor det har vært enkelt å bruke Rexx fra andre språk. I dag finnes det implementasjoner av Rexx som er portable over en rekke [[Operativsystem|operativsystemer]] og plattformer. Rexx finnes i en [[Objektorientert programmering|objektorientert]] utgave kalt ObjectRexx, og en utgave av som kjører under en [[Java (programmeringsspråk)|Java]] [[virtuell maskin]] kalt NetRexx. Rexx ble godkjent som en ANSI-standard i 1996.<ref>{{kilde www|url=http://rexxla.org/rexxlang/standards/|tittel=The Rexx Language Association - Standard Rexx|besøksdato=2009-01-12}}</ref> == Syntaks == Rexx har en engelsklignende syntaks, og gjør svært lite bruk av skilletegn i forhold til mange andre språk. Målet med språket er at det skal være enkelt å bruke for nybegynnere, men likevel kraftig nok til avanserte oppgaver. === Hello, World! === Det idiomatiske ''[[Hello, world|Hello, World]]''-programmet ser slik ut: say "Hello, World!" === Et litt mer utførlig eksempel === <syntaxhighlight lang="text"> /* enkel aritmetikk i rexx */ do forever say "Type a number:" parse pull number if datatype(number) \= "NUM" then do say '"'number'" is not a number!' exit end factor = 1; do while factor <= 10 say number "*" factor "=" number*factor factor = factor + 1 end end </syntaxhighlight> Kommentarer skrives på samme måte som i [[C (programmeringsspråk)|C]], mellom ''/*'' og ''*/''. Kommandoen ''parse pull'' leser inn en linje fra konsoll og lagrer den i variabelen ''number''. Funksjonen ''datatype()'' gir ut en [[Streng (informatikk)|streng]] som beskriver typen data som er i variabelen ''number'' (''CHAR'' eller ''NUM''.) Resten skulle være noenlunde selvforklarende. == Datatyper == Rexx har egentlig kun to datatyper, ''symboler'' og ''strenger''. Symboler brukes som regel til å holde navnet på variabler, mens strenger inneholder de faktiske dataene som programmet bruker. === Symboler === I Rexx har et symbol alltid en verdi. Et uinitialisert symbol er en streng med sitt eget navn (med store bokstaver). For eksempel: say "Hallo" navn navn = "Guttorm" say "Hallo" navn Vil gi følgende resultat: Hallo NAVN Hallo Guttorm === Strenger === I Rexx er alle data i form av strenger. Numeriske operasjoner opererer på tall representert som strenger, uten begrensninger på størrelse eller presisjon. Den faktiske typen av data i en streng kan utledes ved bruk av den innebygde funksjonen ''datatype()''. For eksempel: say datatype("1") say datatype("Fredrik") say datatype("3.14") Vil gi resultatet: NUM CHAR NUM === Stilker === Rexx har ingen egen strukturert datatype, men gjør bruk av noe som kalles ''stilker'' (fra engelsk "stems"). Dette er ikke en egentlig datatype, men en konvensjon som er mye brukt. Stilker består av to eller flere symboler og indekser adskilt med punktum. person.0 = 2 person.1.navn = "Harald" person.1.alder = 36 person.2.navn = "Einar" person.2.alder = 42 do i = 1 to person.0 say person.i.navn "er" person.i.alder "år gammel." end Dette gir følgede resultat: Harald er 36 år gammel. Einar er 42 år gammel. I tilfeller hvor man bruker stilker som lister, er det konvensjon å bruke indeks 0 til å angi hvor mange elementer det er i listen. == Prosedyrer == En prosedyre er i Rexx en navngitt programsnutt som kan utføre en oppgave, og som kan kalles en eller flere ganger fra den resterende programkoden. Rexx skiller mellom interne og eksterne prosedyrer. === Interne prosedyrer === En intern prosedyre er en som er definert i samme programfil som den blir kalt fra, mens en ekstern prosedyre er definert i sin egen programfil. Her er et eksempel på bruk av en intern prosedyre: say half(16) say half(6.8) exit half: parse arg num return "Halvparten av" num "er" num/2 === Eksterne prosedyrer === Vi kan lage det samme programmet som over med en ekstern funksjon i stedet. Først hovedprogrammet: say half(16) say half(6.8) exit I en separat fil som vi kaller ''half.rexx'' har vi følgende: parse arg num return "Halvparten av" num "er" num/2 Resultatet av de to programmene skal være det samme. Når et program kaller en prosedyre vil Rexx først se om det finnes en prosedyre med samme navn i den kjørende programfilen. Dersom det ikke gjør det vil den lete etter en egen fil som har det navnet til prosedyren. Regler for hvilke etternavn, og om store bokstaver er viktige eller ikke er noe opp til implementasjonen. === Lokale variabler === Når man definerer en intern prosedyre som over, vil prosedyren i utgangspunktet ha tilgang til alle varable som er i bruk i programmet. Ofte ønsker vi å benytte lokale variable i en prosedyre, og begrense tilgangen til varable utenfor. Dette kan vi gjøre med ''procedure''-kommandoen. a = 4 b = "Nils" call baklengs say c exit baklengs: procedure expose b say a say reverse(b) c = 5 return Prosedyren ''baklengs'' har her to lokale variable ''a'' og ''c'', mens den har blitt gitt tilgang til den globale ''b''. Resultatet av å kjøre dette programmet vises nedenfor. A sliN C Vi ser at prosedyren skriver ut ''A'' i stedet for verdien av variablene ''a'' siden denne ikke er definert i prosedyren. Verdien av ''c'' er på samme måte ikke synlig utenfor prosedyren hvor den er definert. Variabelen ''b'' har dermed blitt gjort synlig via ''expose''-kommandoen, så prosedyren har full tilgang til den. ''Expose''-kommandoen gir en prosedyre tilgang til variable som er tilgjengelige der hvor prosedyren blir kalt fra. Rexx har ikke noe globalt skop for variable, så om ikke variabelen ikke er tilgjengelig der en prosedyre blir kalt fra så finnes det ingen måte å gi prosedyren tilgang til variabelen heller. Programmet nedenfor vil kanskje ikke gi helt det resultatet man ville forvente: a = "Geir" b = "Nils" call forlengs_baklengs exit forlengs_baklengs: procedure expose a say a call baklengs return baklengs: procedure expose b say reverse(b) return Resultat: Geir B Hvis man derimot i prosedyren ''forlengs_baklengs'' satte inn: procedure expose a b Så ville resultatet bli mer som forventet: Geir sliN ==Referanser== <references /> == Eksterne lenker == * {{Offisielt nettsted}} * [http://www.rexxla.org/ The Rexx Language Association] * [http://www.oorexx.org/ Open Object Rexx] * [https://web.archive.org/web/20090123184252/http://www-01.ibm.com/software/awdtools/netrexx/ IBMs NetRexx side] * [http://regina-rexx.sourceforge.net/ Regina Rexx Interpreter] (portabel over mange plattformer.) {{programmeringsspråk}} {{Autoritetsdata}} [[Kategori:Programmeringsspråk]] [[Kategori:Skriptspråk]]
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Maler som brukes på denne siden:
Mal:Amboks
(
rediger
)
Mal:Autoritetsdata
(
rediger
)
Mal:Bilde fra Wikidata
(
rediger
)
Mal:Hlist/styles.css
(
rediger
)
Mal:ISOtilNorskdato
(
rediger
)
Mal:Infoboks/styles.css
(
rediger
)
Mal:Infoboks bilde
(
rediger
)
Mal:Infoboks dobbeltrad
(
rediger
)
Mal:Infoboks overskrift
(
rediger
)
Mal:Infoboks programmeringsspråk
(
rediger
)
Mal:Infoboks rad
(
rediger
)
Mal:Infoboks slutt
(
rediger
)
Mal:Infoboks start
(
rediger
)
Mal:Kilde www
(
rediger
)
Mal:Navboks
(
rediger
)
Mal:Offisielle lenker
(
rediger
)
Mal:Offisielt nettsted
(
rediger
)
Mal:Programmeringsspråk
(
rediger
)
Mal:Referanseløs
(
rediger
)
Modul:Arguments
(
rediger
)
Modul:Citation/CS1
(
rediger
)
Modul:Citation/CS1/COinS
(
rediger
)
Modul:Citation/CS1/Configuration
(
rediger
)
Modul:Citation/CS1/Date validation
(
rediger
)
Modul:Citation/CS1/Identifiers
(
rediger
)
Modul:Citation/CS1/Utilities
(
rediger
)
Modul:Citation/CS1/Whitelist
(
rediger
)
Modul:External links
(
rediger
)
Modul:External links/conf
(
rediger
)
Modul:External links/conf/Autoritetsdata
(
rediger
)
Modul:External links/conf/Offisielle lenker
(
rediger
)
Modul:Genitiv
(
rediger
)
Modul:ISOtilNorskdato
(
rediger
)
Modul:Message box
(
rediger
)
Modul:Message box/ambox.css
(
rediger
)
Modul:Message box/configuration
(
rediger
)
Modul:Navbar
(
rediger
)
Modul:Navbar/configuration
(
rediger
)
Modul:Navboks
(
rediger
)
Modul:Navbox/configuration
(
rediger
)
Modul:Navbox/styles.css
(
rediger
)
Modul:Reference score
(
rediger
)
Modul:Reference score/conf
(
rediger
)
Modul:Reference score/i18n
(
rediger
)
Modul:String
(
rediger
)
Modul:Wikidata2
(
rediger
)
Modul:WikidataBilde
(
rediger
)
Modul:WikidataDato
(
rediger
)
Modul:Yesno
(
rediger
)
Denne siden er medlem av 3 skjulte kategorier:
Kategori:Artikler med offisielle lenker og uten kobling til Wikidata
Kategori:Artikler uten offisielle lenker fra Wikidata
Kategori:Artikler uten referanser
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon