Ruby
Ruby | |||
Utviklar | Yukihiro Matsumoto | ||
---|---|---|---|
Utgjeve | 1995[1] | ||
Nyaste versjon | 3.3.6(5. november 2024)[2] | ||
Operativsystem | Microsoft Windows, Linux, BSD, macOS | ||
Skriven i | C | ||
Type | programmering, creating, analyse, webutvikling | ||
Lisens | Ruby License, GPLv2, 2-clause BSD License | ||
Nettstad | https:// ruby-lang.org/ |
Rubyer eitobjektorientertprogrammeringsspråk.Det kombinerer syntaks inspirert avAdaogPerlmedSmalltalksine objektorienterte eigenskapar. Det deler òg eigenskapar medPython,LispogCLU.Det vart opphavleg utforma som eit tolka programmeringsspråk, men i si JRuby-utgåve kan det bli kompilert.
Historie
[endre|endre wikiteksten]Språket vart etablert avYukihiro "Matz" Matsumotosom starta jobben med Ruby den 24. februar 1993 og lanserte det i 1995. Namnet Ruby vart valt for å peike på arven etter Perl. I følgje forfattaren vart Ruby utforma for å følgje eit prinsipp omden minste overraskinga.Med dette meiner han at språket skal vere fri for feller og inkonsistensar som pregar andre språk. I desember 2004 var siste stabile versjon 1.8.2.
Filosofi
[endre|endre wikiteksten]Ruby er objektorientert: Alle bitar av data er eit objekt. Dette omfattar typar andre språk ofte definerer som primitive datatypar, slik som til dømes integer. Kvar funksjon er ein metode. Alle variablar er ein referanse til eit objekt, ikkje til objektet sjølv. Ruby støttar arv og import av modular som såkallaMixIn(å endre delar av funksjonaliteten i ein klasse). Prosedyre-syntaks er inkludert, men alle slike prosedyrar skrivne utanfor ein sjølvdefinert klasse blir gjort på klassen av type Object. Sidan denne klassen er forelder til alle andre klassar, blir slike prosedyrar synlege for alle klassar og objekt.
Implementasjonar
[endre|endre wikiteksten]Ruby har to hovudimplementasjonar: Den offisielle Ruby-tolkaren, som er den mest utbreidde, og JRuby, som er einJava-basert implementasjon.
Ruby har òg vorte brukt til rammeverk for utvikling av tynne klienter for verdsveven, t.d.Ruby on rails.
Lisensiering
[endre|endre wikiteksten]Ruby blir distribuert underGPLog Ruby License.[3]
Eigenskaper
[endre|endre wikiteksten]- objektorientert
- Avvikshåndtering
- Iteratorar
- Å sende blokker av kode som parameter (closure)
- Overstyring av operatorar
- Automatisk fjerning av objekt som ikkje lenger er i bruk (garbage collection)
- Fleirtrådshandtering
- Lasting av DLL-bibliotek (underMicrosoft Windows)
- Introspectionogreflection.
- Stort standard bibliotek.
- Støttar innsetting av avhengigheiter.
Per dags dato manglar Ruby støtte forUnicode,men har delvis støtte forUTF-8.
Moglege overraskingar
[endre|endre wikiteksten]Sjølv om Ruby er utforma etter prinsippet omden minste overraskingaer det store skilnader frå andre språk somCogPerl.
- Lokale variablar må ha namn som startar med små bokstav, elles blir dei betrakta som konstantar.
- 0, "" og [] er sant (true): I C blir uttrykket 0? 1: 0 tolka som 0. I Ruby blir dette tolka som 1. Forsvar: I Ruby returnerer mange uttrykk anten ein numerisk verdi, ein streng eller “null”. Når ein slik verdi blir tolka i ein boolsk samanheng blir berre” null” tolka som usann (false). Kvar numerisk, streng eller array-verdi inkludert null (0, tom streng, "", eller array []) blir tolka som sann (true). Difor, som i Java, vil det ikkje fungere med C- og Perl sin automatiske konvertering av numeriske verdiar, strengar og array til boolsk usann.
- For å indikere flyttal er det ikkje nok å legge til eit punktum (99.). Fordi nummer kan forvekslast med metodar må ein legge til ein ekstra null (99.0) eller gje opp konverteringa eksplisitt (99.to_f).
- Der er ingen karakter datatype. Dette kan føre til uventa resultat ved kutting av strengar:” abc” [0] gir 97 som er den numeriskeASCII-kodenfor den første karakteren i strengen.
Døme
[endre|endre wikiteksten]Eit grunnleggande døme:
# Alt er objekt -199.abs # 199 "ruby is cool".length # 12 "Rick".index( "c" ) # 2 "Nice Day Isn't It?".split(//).uniq.sort.join # "'?DINaceinsty"
Lister
[endre|endre wikiteksten]Eit 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]
Ein hash-tabell:
hash = {'water' => 'wet', 'fire' => 'hot'} puts hash['fire'] hash.each_pair do |key, value| puts "#{key} is #{value}" end # Skriv ut: water is wet # fire is hot hash.delete_if {|key, value| key == 'water'} # Slettar 'water' => 'wet'
Blokker og iteratorar
[endre|endre wikiteksten]To måtar å opprette ei kodeblokk:
{puts "Hello, World!" }
do puts "Hello, World!" end
Sende ei blokk som parameter (closure):
def remember &p @block =p end # Sender med ei kodeblokk som parameter og gir den eit namn remember {|name| puts "Hello," + name + "!" } # Når tida er inne -- kall closure! @block.call( "Johnny" ) # Prints "Hello, Johnny!"
Iterere over array og enumeratorar:
a =[1, 'hi', 3.14] a.each {|item| puts item} # Skriv ut kvart element (3..6).each {|num| puts num} # Skriv ut 1 -6.
Blokker fungerer med mange innebygde metodar:
IO.readlines('file.txt') do |line| # gjer noko med linja her. end
Kvadrere 1 til 10:
(1..10).collect {|x| x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Klassar
[endre|endre wikiteksten]Følgjande kode definerer klassen Person. I tillegg til ’initialize’, den vanlege konstruktøren, har klassen to metodar: Ein for å overstyre <=>-operatoren for å sortere etter alder. Den andre overstyreto_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 skriv ut ei liste sortert med den eldste først:
Markus (63) John (20) Ash (16)
Hello World
[endre|endre wikiteksten]puts "Hello World!"
Kjelder
[endre|endre wikiteksten]- ↑https:// ruby-lang.org/en/about/.
- ↑«Ruby 3.3.6 Released».5. november 2024.
- ↑Licensei ruby-lang.org[daud lenkje]
Bakgrunnsstoff
[endre|endre wikiteksten]- Offisiell nettstad
- Programming RubyArkivert2004-09-26 vedWayback Machine.—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ålArkivert2004-08-10 vedWayback Machine., ellerden gamle versjonenArkivert2006-04-23 vedWayback Machine.
- Ruby Application ArchiveArkivert2013-08-05 vedWayback Machine.(RAA)
- JRuby
- The Ruby Documentation project