Ruby
Fra Wikipedia, den frie encyklopedi
- «Ruby» har flere betydninger.
Ruby er et objektorientert programmeringsspråk. Det kombinerer syntaks inspirert av Perl med Smalltalk sine objektorienterte egenskaper. Det deler også egenskaper med Python, Lisp, Dylan og CLU. Ruby er et tolket programmeringsspråk. Hovedimplementasjonen er fri programvare.
Innhold |
[rediger] Historie
Språket ble laget av Yukihiro "Matz" Matsumoto som startet jobben med Ruby den 24. februar 1993 og lanserte det i 1995. Navnet «Ruby» ble valgt etter en kollega sin fødselsdagsstein - en Rubin.
[rediger] Filosofi
I følge forfatteren ble Ruby utformet etter prinsippet om færrest mulige overraskelser. Med dette mener han at språket skal være fritt for feller og inkonsekvenser som preger andre språk.
Ruby er objektorientert: Alle biter av data er et objekt. Dette omfatter typer som andre språk ofte definerer som primitive datatyper, slik som for eksempel et heltall. Hver funksjon er en metode. Alle variabler er en referanse til et objekt, og ikke objektet selv. Ruby støtter arv og import av moduler som såkalte MixIns (å endre deler av funksjonaliteten i en klasse). Prosedyre-syntaks er inkludert, men alle slike prosedyrer skrevet utenfor en selvdefinert klasse blir gjort på klassen av type Object. Siden denne klassen er forelder til alle andre klasser, blir slike prosedyrer synlige for alle klasser og objekter.
[rediger] Implementasjoner
Ruby har to hovedimplementasjoner: Den offisielle Ruby-tolkeren, som er den mest utbredte, og JRuby, som er en Java-basert implementasjon.
[rediger] Lisensiering
Ruby blir distribuert under GPL og Ruby License [1].
[rediger] Egenskaper
- Objektorientert
- Avvikshåndtering
- Iteratorer
- Å sende blokker av kode som parameter
- Closures
- Overstyring av operatorer
- Automatisk fjerning av objekt som ikke lenger er i bruk (garbage collection)
- Flertrådshandtering
- Lasting av DLL-bibliotek (under Microsoft Windows)
- Introspection og reflection.
- Stort standardbibliotek.
- Støtter innsetting av avhengigheter.
Ruby mangler, per dags dato, full støtte for Unicode, men har delvis støtte for UTF-8. I versjon 2.0 er målet full støtte av unicode-strenger.
[rediger] Mulige overraskelser
Selv om Ruby er utformet etter prinsippet om færrest mulige overraskelser er det store forskjeller fra andre språk som C og Perl.
- Lokale variabler må ha navn som starter med små bokstaver, ellers blir de betraktet som konstanter.
- 0, "" (tom streng) og [] (tom liste/array) evalueres til sant (true). I C blir uttrykket 0 ? 1 : 0 tolket som 0. I Ruby blir dette tolket som 1.
- For å indikere flyttall er det ikke nok å legge til et punktum (99.). Fordi nummer kan forveksles med metoder må man legge til en ekstra null (99.0) eller oppgi konverteringen eksplisitt (99.to_f).
- Det er ingen egen datatype for skrifttegn. Dette kan føre til uventet resultat ved avkutting av strenger: ”abc”[0] gir 97 som er den numeriske ASCII-koden for det første tegnet i strengen.
[rediger] Eksempler
Et klassisk Hello World-eksempel:
puts "Hello World!"
Litt grunnleggende Ruby-kode:
# Alt er objekter -199.abs # 199 "ruby is cool".length # 12 "Rick".index("c") # 2 "Nice Day Isn't It?".split(//).uniq.sort.join # " '?DINaceinsty"
[rediger] Lister
Et array:
a =[1, 'hi', 3.14, 1, 2, [4, 5]] a[2] # 3.14 a.reverse # [[4, 5], 2, 1, 3.14, "hi", 1] a.flatten.uniq # [1, "hi", 3.14, 2, 4, 5]
En hash-tabell:
hash = {'water' => 'wet', 'fire' => 'hot'} puts hash['fire'] hash.each_pair do |key, value| puts "#{key} is #{value}" end # Skriver ut: water is wet # fire is hot hash.delete_if {|key, value| key == 'water'} # Sletter 'water' => 'wet'
[rediger] Blokker og iteratorer
To måter å opprette en kodeblokk:
{puts "Hello, World!"} do puts "Hello, World!" end
Sende en blokk som parameter:
def remember &p @block =p end # Sender med en kodeblokk som parameter og navngir den remember {|name| puts "Hello, " + name + "!"} # Kall funksjonen @block.call("Johnny") # Skriver ut "Hello, Johnny!"
Iterere over array og enumeratorer:
a =[1, 'hi', 3.14] a.each {|item| puts item} # Skriver ut hvert element (3..6).each {|num| puts num} # Skriver ut 1 -6.
Blokker fungerer med mange innebygde metoder:
IO.readlines('file.txt') do |line| # gjør noe med linjen her. end
Kvadrere 1 til 10:
(1..10).collect {|x| x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[rediger] Klasser
Følgende kode definerer klassen Person. I tillegg til å initialisere den vanlige konstruktøren, har klassen to metoder: En for å overstyre <=>-operatoren for å sortere etter alder. Den andre overstyrer to_s for å få korrekt formatering.
class Person def initialize(name, age) @name, @age = name, age end def <=>(person) @age <=> person.age end def to_s "#{@name} (#{@age})" end attr_reader :name, :age end group = [ Person.new("John", 20), Person.new("Markus", 63), Person.new("Ash", 16) ] puts group.sort.reverse
Koden over skriver ut en liste sortert med den eldste først:
Markus (63) John (20) Ash (16)
[rediger] Eksterne lenker
- Ruby sin hjemmeside
- Ruby Garden
- Programming Ruby—Full tekst av bok av David Thomas & Andrew Hunt, ISBN 0-201-71089-7
- Why's Poignant Guide to Ruby
- Ruby Ofte stilte spørsmål, eller den gamle versjonen
- Ruby Application Archive (RAA)
- JRuby
- The Ruby Documentation project
- Ruby Forum
- RubyForge
- RedHanded—Daglige Ruby-nyheter
- Norske ruby klubb
- Full Ruby on Rails Tutorial
Ada | Algol60 | Algol-68 | APL | Assembler | awk | BASIC | BETA | BLISS | C | C++ | C# | Caml | CLU | Cobol | Concurrent C | Concurrent Pascal | Delphi | Erlang | Euclid | Forth | Fortran | Gypsy | Haskell | HyperTalk | INTERCAL | Java | JavaScript | Lisp | Mesa | ML | Modula | Modula-2 | Objective-C | OCaml | O'Haskell | Pascal | Perl | PHP | Pike | PL/I | Plankalkül | Prolog | Python | REXX | Ruby | Scheme | Simula | SML | Smalltalk | Snobol | Visual Basic

