Ruby
Sisukord
- 1 Sissejuhatus
- 2 Ruby paigaldamine
- 3 Ruby dokumentatsioon
- 4 Programmeerimine Rubys
- 5 Ruby interpretaator
- 6 Ruby skript
- 7 Andmestruktuurid
- 8 Meetodid
- 9 Konsoolilt sisendi lugemine
- 10 Jadatöötlus
- 11 Stringitöötlus
- 12 Shelli värvid
- 13 Klassi kirjeldamine
- 14 SMTP
- 15 PostgreSQL andmebaasi kasutamine
- 16 DNS
- 17 Soketi kasutamine
- 18 RubyGems
- 19 Ruby on Rails
- 20 Kasulikud lisamaterjalid
Sissejuhatus
Ruby http://www.ruby-lang.org/ on populaare programmeerimikeel, millele on iseloomulikud sellised asjaolud
- objekt-orienteeritud keel
- skriptimskeel
2010 aastal on levinud kaks Ruby versiooni
- 1.8 - ...
- 1.9 - ...
Ruby paigaldamine
Debian Lenny paketihalduses on olemas kaks Ruby versiooni
- 1.8.7 - vaikimisi
- 1.9.0 - võimalik lisaks paigaldada
Ruby v. 1.8.7 paigaldmiseks sobib öelda (tegelik paketinimi on ruby1.8)
# apt-get install ruby
Lisaks paigaldatakse pakett libruby1.8, mis sisaldab Ruby kasutamiseks vajalikke teeke, teegid kopeeritakse kataloogi
/usr/lib/ruby/1.8
Paigaldatud Ruby versiooni küsimiseks sobib öelda
$ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Ruby dokumentatsioon
Ruby dokumentatsiooni kasutamiseks tuleb paigaldada pakett ri
# apt-get install ri
ning nt Resolv teegi kohta info küsimiseks öelda
$ ri Resolv ---------------------------------------------------------- Class: Resolv Resolv is a thread-aware DNS resolver library written in Ruby. Resolv can handle multiple DNS requests concurrently without blocking. The ruby interpreter. See also resolv-replace.rb to replace the libc resolver with # Resolv. Resolv can look up various DNS resources using the DNS module directly. Examples: p Resolv.getaddress "www.ruby-lang.org" p Resolv.getname "210.251.121.214"
Programmeerimine Rubys
Ruby on
- dünaamilise tüübiskeemiga (ingl. k. dynamically typed) keel - programmi käivitamisel ajal (ingl. k. runtime) toimub tüüpide üle otsustamine; st praktiliselt, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
- nõrga tüübiskeemiga (ingl. k. weakly typed) keel - erinevat tüüpi muutujatega saab teha teatud operatsioone, nt liita arv ja sõne
Ruby on objekt-orienteeritud keel, st kõik Rubys on objektid, sh numbrid, nt avaldis esitab arvu viis meetodid
puts 5.methods
ja avaldis esitab arvu viis klassi
puts 5.class
Ruby interpretaator
Ruby interpretaatori paigaldamiseks tuleb Debian operatsiooni puhul öelda
# apt-get install irb
Interpretaatorit saab kasutada nt kalkulaatorina
$ irb irb(main):001:0> 20.0/8 => 2.5
Ruby skript
Ruby skript esineb tekstifaili kujul, nt selline skript kirjutab 'Hello, world'
puts "Hello, world!"
Skripti käivitamiseks sobib öelda
$ ruby skript.rb
Alternatiiviks on lisada faili algusse rida interpretaatori nimega
#!/usr/bin/ruby puts "Hello, world!"
ning muuta fail käivitatavaks
$ chmod 0755 skript.rb
ning käivitada
$ ./skript.rb
Andmestruktuurid
TODO
Sõne
muutuja = "Tere hommikust!"
Sõne osa 'hommikust' poole saab pöörduda selliselt
muutuja[5..13]
Arv
muutuja = 5
Massiiv
Massiiv (ingl. k. list) on järjestatud hulk
massiivinimi = ["yks", "kaks", "kolm"]
Massiivi elemendi poole pöördumine toimub selliselt
puts massiivinimi[1]
Tänu Ruby objekt-orienteeritusele saab kasutades massiivi meetodit each öelda nii
massiivinimi = ["yks", "kaks", "kolm"] massiivinimi.each do |massiivielement| puts massiivielement end
Sõnastik
Sõnastik (ingl. k. hash) on key-value paaridest koosnev järjestamata hulk
sonastik = { 'priit': 167, 'mart': 196 }
Sõnastiku elemendi väärtuse esitamine toimub nii
print sonastik["print"]
Meetodid
Meetodid võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.
def korrutamine(x, y) return x * y end puts korrutamine(15, 3)
Teatud mõttes võib öelda, et tänu Ruby objekt-orienteeritusele on need asjad mis nö tavaliselt on funktsioonid Rubys meetodid.
Konsoolilt sisendi lugemine
print "Enter your name: " name = gets
Jadatöötlus
ary = [1, 2, 3] puts ary[0]
cities = %w[ London Oslo Paris Amsterdam Berlin ] visited = %w[Berlin Oslo] puts "I still need " + "to visit the " + "following cities:", cities - visited
Stringitöötlus
herb = "parsley" puts herb[0,1] puts herb[0..3]
Random funktsioon
puts rand(10)
saame suvalise numbri 0-10
for num in (0..100) print num,"\n" end
Lihtne tsükkel nullist sajani
topelt tsükkel
#!/usr/local/bin/ruby 1.upto(10) do |fg| 1.upto(10) do |bg| print "1" end puts end
Shelli värvid
puts " \e[32mROHELINE\e[0m"
värvitabel, asjalik-vajalik
[0, 1, 4, 5, 7].each do |attr| puts '----------------------------------------------------------------' puts "ESC[#{attr};Foreground;Background" 30.upto(37) do |fg| 40.upto(47) do |bg| print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} " end puts "\033[0m" end end
#!/usr/bin/env ruby require 'pathname' Pathname.new($0).realpath()
#!/usr/bin/env ruby ARGV.each do|a| puts "Argument: #{a}" end
./arg.sh ahaa Argument: ahaa
failid
File.open("file", "r") do |io| # do something with io end
File.open("/location/of/my/file.txt", "r") do |f| while ! f.eof do line = f.gets puts line #Print the line to the screen end end
Klassi kirjeldamine
class Arvutaja def meelespea puts "Monede tehete tulemus soltub jarjekorrast" end end class Liitja < Arvutaja def liitja puts "Liitmine ei soltu jarjekorrast" end end arvuta = Liitja.new arvuta.meelespea arvuta.liitja
kus
- kirjeldatakse kaks klassi, Arvutaja ja Liitja
- Liitja.new tekitab uue objekti 'arvuta'
- arvuti.meelespea ja arvuta.liitja kutsuvad täitmiseks välja klassi meetodid meelespea ning liitja
- klass Liitja pärib klassi Arvutaja meetodid, seetõttu on võimalik kasutada arvuta.meelespea'd mida otseselt ei ole kirjeldatud Liitja klassis
- klasside nimesid on oluline alustada suure algustähega
SMTP
require 'net/smtp' msgstr = <<END_OF_MESSAGE From: Priit Kask <priit@loomaaed.tartu.ee> To: Mart Kask <mart@loomaaed.tartu.ee> Subject: kevad saabub, puurid puhtaks Kirja sisu END_OF_MESSAGE smtp = Net::SMTP.start('192.168.1.250', 25, 'loomaaed.tartu.ee') smtp.send_message msgstr, 'priit@loomaaed.tartu.ee', 'mart@loomaaed.tartu.ee' smtp.finish
PostgreSQL andmebaasi kasutamine
PostgreSQL andmebaasi saab Ruby seest kasutada moodili ruby-pg abil, Debian Lenny keskkonnas sobib selleks paigaldada pakett
# apt-get install libpgsql-ruby
Skript küsib andmebaasist public.kasutajad tabelist kahte väärtust
require 'pg' conn = PGconn.connect("192.168.1.247", 5432, , , "andmebaasinimi", "kasutajanimi", "parool") res = conn.exec("SELECT nimi, vanus FROM kasutajad where nimi = 'Priit Kask';") res.each do |rida| puts "Nimi: #{rida['nimi']}, vanus: #{rida['vanus']}" end res.clear conn.close
DNS
Skript esitab domeeninimele vastavad ip aadressid
require 'resolv' Resolv::DNS.new.each_address("www.loomaaed.tartu.ee") do |addr| puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s end
Soketi kasutamine
Server
require "socket" ajaserver = TCPServer.new('192.168.10.35', 20000) loop do Thread.start(ajaserver.accept) do |s| print(s, " on vastuvoetud\n") s.write(Time.now) print(s, " on teenindatud\n") s.close end end
kus
- kasutatakse socket teeki
- moodustatakse ajaserver nimeline objekt
- käivitatakse loop korduse see uue lõime alustamine sissetuleva ühenduse tekkimsiele
Klient
require 'socket' streamSock = TCPSocket.new( "192.168.10.35", 20000 ) str = streamSock.recv( 100 ) print str + "\n" streamSock.close
RubyGems
RubyGems on Ruby sisemine tarkvara halduse süsteem. Gems süsteemi kasutamise kohta näeb näiteid öeldes
# gem help examples
Tarkvara paigaldamiseks sobib öelda nt
# gem install paketinimi
Tarkvara saab otsida öeldes
# gem search marksona --remote
Ruby on Rails
Ruby on Rails (RoR, ingl. k. Ruby reilssidel) on ...
RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis
# apt-get install rails
RoR rakenduse tekitamiseks tuleb
- tekitada rakendusele vastav kataloogistruktuur
$ rails -D postgresql contactlist
- tekitada andmebaas, nt PostgreSQL
create table contacts ( id serial not null, first_name varchar(100) not null, last_name varchar(100) not null, address varchar(255) not null, city varchar(100) not null, state varchar(2) not null, country varchar(100) not null, phone varchar(15) not null, email varchar(100) , CONSTRAINT pk_id PRIMARY KEY (id) );
ning kohendada baasi ligipääs seadistusfailis
config/database.yml
Nt selliselt
development: adapter: postgresql encoding: unicode database: contactlist_development username: contactlist password: parool host: 192.168.1.247 port: 5432 ...
- tekitada mudel
$ ruby script/generate model Contact
- Veenduda, et mudelit saab Rails konsoolilt kasutada
$ ruby script/console Loading development environment (Rails 2.1.0) >> my_contact = Contact.new => #<Contact id: nil, first_name: nil, last_name: nil, \ address: nil, city: nil, state: nil, country: nil, phone: nil, email: nil>
>> my_contact.first_name = 'Priit' => "Priit" >> my_contact.last_name = 'Kask' => "Kask" >> my_contact.address = 'Loomaaia tee 1' => "Loomaaia tee 1" >> my_contact.city = 'Tartu' => "Tartu" >> my_contact.state = 'TR' => "Tartu" >> my_contact.country = 'Eesti' => "Eesti" >> my_contact.phone = '54331' => "54331" >> my_contact.email = 'priit@loomaaed.tartu.ee' => "priit@loomaaed.tartu.ee" >> my_contact.save
Kasulikud lisamaterjalid
- http://www.ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/index.html
- http://www.elctech.com/articles/ruby-daemons-and-angels ruby ja deemonid
- http://www.phptoruby.com/ php ja ruby süntaksi teisendused
- Learning Ruby (Michael Fitzgerald)
- Ruby Cookbook (Lucas Carlson, Leonard Richardson)
- Python