Movatterモバイル変換


[0]ホーム

URL:


Hopp til innhold
Wikipedia
Søk

Ruby

Fra Wikipedia, den frie encyklopedi
«Ruby» harflere betydninger.
Ruby
Tilblivelse1995[1]
ParadigmeMulti-paradigme:Funksjonell programmering,imperativ programmering,objektorientert programmering, selvmodifiserende programmering
Designet og utviklet avYukihiro Matsumoto
Siste versjon(er)3.4.2 / 14. feb. 2025
Typetildeling løpende, dynamisk, sterk
Filendelse(r).rb, .rbw
OSMicrosoft Windows,Linux,BSD,macOS
LisensRuby License,GPLv2,2-clause BSD License
Implementert i
C
Påvirket av
Ada,Dylan,Perl,Python,Smalltalk,C++,CLU,Eiffel,Lisp,BASIC,Lua,Emacs

Ruby er etobjektorientertprogrammeringsspråk som kombinerer syntaks inspirert avPerl medSmalltalks objektorienterte egenskaper. Språket deler også egenskaper medPython,Lisp,Dylan ogCLU. Det er ettolket programmeringsspråk. Hovedimplementasjonen erfri programvare.

Historie

[rediger |rediger kilde]

Språket ble lagd avYukihiro "Matz" Matsumoto, som startet jobben med Ruby den24. februar1993 og lanserte språket i1995. Navnet «Ruby» ble valgt som en litt humoristisk referanse til Perl.[2]

Ruby har blitt spesielt populært i webprogrammeringsmiljøer takket være utviklingsmiljøetRuby on Rails.

Filosofi

[rediger |rediger kilde]

Ifølge skaperen ble Ruby utformet etter prinsippet omfæ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, som vil si at alle databiter er et objekt. Dette omfatter typer, som andre språk ofte definerer som primitive datatyper, som for eksempel etheltall. 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åkalteMixIns (å 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.

Implementasjoner

[rediger |rediger kilde]

Det finnes flere vanlige implementasjoner av Ruby. Den offisielle Ruby-tolkeren, ofte kalt MRI (Matz’ Ruby Implementation), er den mest utbredte etter Ruby versjon 1.9 (denne basert påYARV, en virtuell maskin-implementasjon som skal gi høyere ytelse).[3]JRuby er en versjon basert påJavas virtuelle maskin. Denne integreres lett med Java-baserte tjenerløsninger som for eksempelTomcat ogGlassfish, og kan sømløst kalle Java-API-er fra Ruby og vice versa.[4]Tilsvarende finnes ogsåIronRuby, som kjører på.NET-/Mono-plattformen.Rubinius er en implementasjon basert påLLVM som virtuell maskin. OgsåMacRuby er basert på LLVM, men er kun tilgjengelig forApples eget operativsystem,macOS. MacRuby har som mål å være et alternativ tilObjective-C som utviklingsmiljø på Mac.[5]

Lisensiering

[rediger |rediger kilde]

Ruby blir distribuert underGPL ogRuby LicenseArkivert 26. august 2011 hosWayback Machine.. De øvrige implementasjonene distribueres under en rekke forskjellige lisenser for åpen kildekode.

Egenskaper

[rediger |rediger kilde]
  • 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 (underMicrosoft Windows)
  • Introspection ogreflection.
  • Stort standardbibliotek.
  • Støtter innsetting av avhengigheter.

Ruby er objektorientert

[rediger |rediger kilde]

Ruby støtter utvikling basert på klasser, og klasser kan arve hverandre:

class Person  def set_name(n)    @name = n  end  def name    @name  endendclass Worker < Person  def set_title(t)    @title = t  end  def title    @title  endend

Vi kan nå instansiere en arbeider slik:

w = Worker.neww.set_name("Petter")w.set_title("Overbuljongterningpakkmesterassistent")

Siden arbeideren er en person, har han et navn:

w.name=> "Petter"

Han har også en tittel:

w.title=> "Overbuljongterningpakkmesterassistent"

Vi kan spørre om objektet (arbeideren vår) er av en gitt klasse:

w.instance_of? Worker=> true

Vi kan også spørre om objekter er av, eller arvet av en gitt klasse:

w.is_a? Person=> true

Klasser som ikke oppgir en moderklasse arver automatisk klassen Object. Ruby støtter ikkemultippel arv, men gjør bruk av såkaltemixins som lar en klasse gjøre bruk av andre klasser selv om de ikke arver dem direkte.

Ruby støtter avvikshåndtering

[rediger |rediger kilde]

Ruby definerer en rekke avviksklasser, og støtter også brukerdefinerte avvik. Avvik fanges opp av enrescue-linje i enbeginend-blokk, eller i en metodedefinisjon:

MyError = Class.new(RuntimeError)def smell  raise MyError.new("Pang!")enddef safe_method  smell  puts "Denne linjen vil aldri kjøres..."rescue RuntimeError => ex  puts ex.message  puts ex.classend

Kjører visafe_method vil ruby svare slik:

Pang!MyError

Kjører vi imidlertidsmell direkte, så fanger vi ikke feilen og ruby skriver ut feilinformasjon og avslutter programmet.

Ruby mangler, per dags dato, full støtte forUnicode, men har delvis støtte forUTF-8. I versjon 2.0 er målet full støtte av unicode-strenger.

Mulige overraskelser

[rediger |rediger kilde]

Selv om Ruby er utformet etter prinsippet omfærrest mulige overraskelser er det store forskjeller fra andre språk somC ogPerl.

  • 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. I Ruby versjon 1.8 og tidligere kunne dette føre til et uventet resultat ved avkutting av strenger: ”abc”[0] ga 97 som er den numeriske ASCII-koden for det første tegnet i strengen. I Ruby versjon 1.9 og senere gir dette resultatet "a" som er mer som ventet.[6]

Eksempler

[rediger |rediger kilde]

Et klassiskHello 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"

Lister

[rediger |rediger kilde]

Et array:

a=[1,'hi',3.14,1,2,[4,5]]a[2]# 3.14a.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'}putshash['fire']hash.each_pairdo|key,value|puts"#{key} is#{value}"end# Skriver ut:             water is wet#                     fire is hothash.delete_if{|key,value|key=='water'}# Sletter 'water' => 'wet'

Blokker og iteratorer

[rediger |rediger kilde]

To måter å opprette en kodeblokk:

{puts"Hello, World!"}doputs"Hello, World!"end

Sende en blokk som parameter:

defremember&p@block=pend# Sender med en kodeblokk som parameter og navngir denremember{|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|putsitem}# Skriver ut hvert element(3..6).each{|num|putsnum}# 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]

Klasser

[rediger |rediger kilde]

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 overstyrerto_s for å få korrekt formatering.

classPersondefinitialize(name,age)@name,@age=name,ageenddef<=>(person)@age<=>person.ageenddefto_s"#{@name} (#{@age})"endattr_reader:name,:ageendgroup=[Person.new("John",20),Person.new("Markus",63),Person.new("Ash",16)]putsgroup.sort.reverse

Koden over skriver ut en liste sortert med den eldste først:

Markus (63)John (20)Ash (16)

Referanser

[rediger |rediger kilde]
  1. ^www.ruby-lang.org[Hentet fra Wikidata]
  2. ^«An Interview with the Creator of Ruby». Besøkt 5. august 2010. 
  3. ^«YARV - Yet Another Ruby VM». Arkivert fraoriginalen 8. mars 2009. Besøkt 28. juli 2010. 
  4. ^«Using Java Classes in JRuby». Arkivert fraoriginalen 6. august 2009. Besøkt 28. juli 2010. 
  5. ^«MacRuby Home». Besøkt 28. juli 2010. 
  6. ^«Ruby 1.9.1 release notes». Arkivert fraoriginalen 17. januar 2022. Besøkt 1. mars 2011. 

Eksterne lenker

[rediger |rediger kilde]
A# ·ActionScript ·Ada ·Alef ·ALGOL ·ALGOL 58 ·ALGOL 60 ·ALGOL 68 ·ALTRAN ·APL ·AppleScript ·Argus ·Assembler ·Autokode ·awk ·B ·BASIC ·BCPL ·BETA ·BitC ·BLISS ·Bourne Shell ·C ·C++ ·C-- ·CHILL ·C# ·C shell ·Caml ·Ch ·Cilk · Cilk++ ·Cilk Plus ·Clarion ·Clipper ·CLISP ·Clojure ·CLU ·COBOL ·COMAL ·Common Lisp ·Concurrent C ·Concurrent Euclid ·Concurrent Pascal ·C shell ·D ·Delphi ·Dylan ·ECMAScript ·Eiffel ·Emacs Lisp ·Erlang ·Euclid ·F* ·F# ·Forth ·Fortran ·GNU Common Lisp ·GNU Pascal ·Go ·Haskell ·HyperTalk ·Incr Tcl ·INTERCAL ·Interlisp ·Java ·JavaScript ·JRuby ·LaTeX ·Legoscript ·LilyPond ·Limbo ·Lisp ·LPC ·Lua ·Lynx ·Mary ·MATLAB ·Mesa ·ML ·MML ·Modula ·Modula-2 ·Modula-2+ ·MUMPS ·Objective-C ·Objective-C++ ·OCaml ·OpenVera ·O'Haskell ·Pascal ·Perl ·PHP ·Pike ·PL/I ·Plankalkül ·PLEX ·Prolog ·Protel ·Pure Data ·Python ·R ·Ratfor ·REXX ·RTL/2 ·Ruby ·Rust ·SAS ·Scala ·Scheme ·Scratch ·Simula ·SML ·Smalltalk ·SNOBOL ·Tcsh ·Tcl ·TECO ·TOM ·Turbo Basic ·Turbo Pascal ·Verilog ·Visual Prolog ·Turing ·TypeScript ·Vala ·VHDL ·Visual Basic
Oppslagsverk/autoritetsdata
Hentet fra «https://no.wikipedia.org/w/index.php?title=Ruby&oldid=23831501»
Kategori:
Skjulte kategorier:

[8]ページ先頭

©2009-2025 Movatter.jp