^ Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31 ^|
| [[program:sprog-python|forrige]] | Kapitel 2. Vælg et sprog | [[program:sprog-scheme|næste]] |
----
==== 2.29. Ruby ====
Ruby tilhører, sammen med Perl og Python, gruppen af moderne fortolkede
sprog. Fra begyndelsen er Ruby designet som et objektorienteret sprog
og giver derfor en mere elegant oplevelse end Perls objekter, men
derudover minder Ruby langt hen af vejen om en pænere version af
Perl.
Ruby er hovedsagligt udviklet i Japan og meget af dokumentationen er
skrevet på japansk. Denne mangel på engelsk dokumentation har været
en hindring for Rubys internationale udbredelse. Dette er der ved at
blive rådet bod på, det kan derfor kun anbefales at se nærmere på
Ruby.
=== 2.29.1. Hej verden! ===
Vi begynder med det sædvanlige eksempel. Et lille program der ikke gør
andet end at skrive "Hello World!" ud på skærmen. Det giver ikke meget
indtryk af selve sproget Ruby, men viser hvordan man bruger det. Gem
følgende tekst somhello.rb
#!/usr/bin/ruby
print "Hello World!\n"
Programmet kan nu køres ved enten at kalde **ruby** :linus%ruby hello.rbHello World!linux%
eller ved at gøre scriptet udførbart og køre det direkte:linux%chmod a+x hello.rblinux%./hello.rb
Hello World!linux%
=== 2.29.2. Et større eksempel ===
For at vise et lidt større eksempel som giver en lidt større indsigt i
hvordan Ruby ser ud er her et simpelt program til afsendelse af email.
Programmet er ret simpelt. Det beder om en afsender, en modtager og et
emne. Derefter kan man skrive sin mail.
I sin fulde længde ser programmet således ud:
#! /usr/bin/ruby
require 'net/smtp'
mail = ""
begin
print "From: "
from = readline
mail << "From: " << from
from.chomp!
print "To: "
to = readline
mail << "To: " << to
to.chomp!
print "Subject: "
mail << "Subject: " << readline
rescue EOFError
print "\nAborted\n"
exit 1
end
mail << "\n"
print "Write mail end with . or EOF\n"
begin
line = readline
break if (line == ".\n")
mail << line
rescue EOFError
break
end while true
smtp = Net::SMTP::new("localhost")
smtp.start
smtp.sendmail(mail, from, to)
smtp.finish
Den første linjerequire 'net/smtp'
Fortæller at vi har brug for biblioteket der implementerer SMTP så vi
kan sende mail.
Selvom Ruby er utypet, så skal vi have et objekt for at kunne lave
metodekald. Derfor bliver vi nødt til at initialiserer variablen mail
med et streng-objekt:
mail = String::new("")
Det næste vi skal gøre er at spørge brugeren om afsenderen, modtageren
og emnet for mailen. Hvis brugeren trykker Ctrl-D (End Of File) skal
programmet stoppe:
begin
print "From: "
from = readline
mail << "From: " << from
from.chomp
print "To: "
to = readline
mail << "To: " << to
to.chomp
print "Subject: "
mail << "Subject: " << readline
rescue EOFError
print "\nAborted\n"
exit 1
end
mail << "\n"
**readline** læser en linje fra standard-ind. Hvis
brugeren sender en EOF (trykker Ctrl-D) rejses end EOFError-undtagelse,
der derfor fanges tilsidst i blokken (fra **rescue
EOFError** ).
<< er en metode på et streng-objekt. Den tilføjer en streng til
objektet. **chomp** -metoden fjerner ny linje-tegnet
sidste fra en streng.
Så skal vi læse selve mailen ind. Dette gøres i en
uendelig **while** -løkke:
print "Write mail end with . or EOF\n"
begin
line = readline
break if (line == ".\n")
mail << line
rescue EOFError
break
end while true
Hvis brugeren sender en EOF hopper vi ud af løkken i rescue-blokken
og hvis brugeren skriver en linje kun indenholdende et punktum hopper
vi også ud af løkken.
Tilbage er bare at sende mailen:
smtp = Net::SMTP::new("localhost")
smtp.start
smtp.sendmail(mail, from, to)
smtp.finish
Vi laver et smtp-objekt og sender mailen med **sendmail** -metoden
=== 2.29.3. One-liners i Ruby ===
**ruby** understøtter en række argumenter der gør det
lettere at skrive one-liners, altså små programmer der kan skrives på
en linje. Disse argumenter kendes også fra perl
----
| [[program:sprog-python|forrige]] | [[program:index|hjem]] | [[program:sprog-scheme|næste]] |
| Python | [[program:vaelg-et-sprog|op]] | Scheme |