SlideShare a Scribd company logo
1 of 41
Download to read offline
Úvod do programování aneb Do nitra stroje
PŘEDNÁŠKA                       Karel Minařík
            4
1   Opakování




                Úvod do programování
VYBAVENÍ




1. Konzole pro přímé zadání kódu

2. Editor

3. Dokumentace (!)




                                   Úvod do programování Přednáška 4
ZÁKLADNÍ TYPY A OPERACE




1. Čísla

2. Texty (řetězce)

3. Pole

4. Aritmetické operace
5. Komentáře
6. Proměnné

7. Podmínky

8. Smyčky




                          Úvod do programování Přednáška 4
puts 1 + 1


!2

puts quot;1quot; + quot;1quot;


! quot;11quot;


číslovka       písmeno
           quot;



puts (1 + 1).class
puts (quot;1quot; + quot;1quot;).class




Datové typy

                         Úvod do programování Přednáška 4
Počítač nedělá to, co chceme, aby dělal.
Počítač dělá přesně to, co mu řekneme, aby dělal.




                                       Úvod do programování Přednáška 4
puts 1 + 1

puts quot;1quot; + quot;1quot;

puts 2 + 2 * 5

puts (2 + 2) * 5

puts quot;Ahojquot; + quot;Sároquot;

puts quot;Ahojquot; + quot; quot; + quot;Sároquot;

  puts quot;Ahojquot; + 2      (!íslo není quot;et#zec)



# puts quot;Ahojquot; + 2      (Tento pquot;íkaz Ruby pquot;esko!í a nebude je provád#t)



puts quot;Nebudu ve $kole zlobitnquot; * 10




Aritmetické operace

                                                                           Úvod do programování Přednáška 4
2   Operace s textem




                       Úvod do programování
Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli
proměnil v jakýsi nestvůrný hmyz. Ležel na hřbetě tvrdém jak pancíř, a když trochu
nadzvedl hlavu, uviděl své vyklenuté, hnědé břicho rozdělené obloukovitými výztuhami, na
jehož vrcholu se sotva ještě držela přikrývka a tak tak že úplně nesklouzla dolů. Jeho četné,
vzhledem k ostatnímu objemu žalostně tenké nohy se mu bezmocně komíhaly před očima.
Co se to se mnou stalo? pomyslel si. Nebyl to sen. Jeho pokoj, správný, jen trochu příliš
malý lidský pokoj, spočíval klidně mezi čtyřmi dobře známými stěnami, Nad stolem, na
němž byla rozložena vybalená kolekce vzorků soukenného zboží - Samsa byl obchodní
cestující -, visel obrázek, který si nedávno vystřihl z jednoho ilustrovaného časopisu a
zasadil do pěkného pozlaceného rámu. Představoval dámu, opatřenou kožešinovou čapkou
a kožešinovým boa, jak vzpřímeně sedí a nastavuje divákovi těžký kožešinový rukávník,
v němž se jí ztrácí celé předloktí.




                                                                         Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'




puts text                              # Vypise text


puts text.upcase                       # Vypise text kapitalkami


puts text.reverse                      # Vypise text pozpatku


puts text.include? quot;otecquot;              # Obsahuje text urcity vyraz?
puts text.include? quot;fenomenologiequot;




                                  Když se Řehoř Samsa
                                  nepokojných snů, shle
                                  proměnil v jakýsi nestv
Práce s textem


                                                                Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'




puts text.length                         # Pocet vsech znaku v textu

puts text.delete(' ').length             # Pocet znaku bez mezer

puts text.split(quot;nquot;).length             # Pocet radek

puts text.split(quot;. quot;).length             # Pocet vet
puts text.split(/. |? |! /).length     # Presnejsi pocet vet
                                           Regularni vyrazy berou v uvahu vety
                                           koncici otaznikem, vykricnikem


puts text.split(' ').length              # Pocet slov



                                  Když se Řehoř Samsa
puts text.split(' ').uniq.length         # Pocet jedinecnych slov




                                  nepokojných snů, shle
puts text.split(' ').uniq.sort           # Seznam jedinecnych slov usporadany
                                           podle abecedy



                                  proměnil v jakýsi nestv
                                                          Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'




puts text.gsub('%ehoquot;', 'Franz')               # Zamen v textu 'Rehor' za 'Franz'
puts text.gsub('e', 'a')                       # Nahradi 'e' za 'a'

puts text.gsub('e', 'a').gsub('í','á'0.gsub('ou', 'ó').gsub('&', 'é').gsub('#',
''a').gsub('u', 'o')




                                  Když se Řehoř Samsa
                                  nepokojných snů, shle
                                  proměnil v jakýsi nestv
                                                              Úvod do programování Přednáška 4
# Integer            # String              # Array
1+1                  quot;pokojquot;.upcase        [1, 2, 3].length
2*2                  quot;pokojquot;.include?      [1, 2, 3].last
9/3                  quot;pokojquot;.length        [1, 2, 3].first
5.times              quot;pokojquot;.delete        [1, 2, 3].sort
5.upto 10            quot;pokojquot;.split         [1, 2, 3].uniq
                                           [1, 2, 3].each




            www.ruby-doc.org/docs/ProgrammingRuby

                                              Úvod do programování Přednáška 4
DOMÁCÍ ÚKOL

text = File.read 'kafka_promena.txt'




Prostudujte si dokumentaci

Spočítejte, kolik normostran má Kafkova Proměna




                                        Úvod do programování Přednáška 4
3   Základní koncepty




                        Úvod do programování
puts quot;Ahojquot; + 2.to_s

puts quot;2 (ábyquot;.to_i + 2




Přetypování


                         Úvod do programování Přednáška 4
puts quot;Nebudu ve $kole zlobitnquot; * 10

puts quot;Ahojquot; + quot; quot; + quot;Sároquot;




Polymorfie (na příkladě operátorů)


                                       Úvod do programování Přednáška 4
a=1
b=2
c=a+b
puts c



name = quot;Duchcovquot;
puts quot;Vítá vás m#sto #{name}quot;




Proměnné
promenne.rb




                                Úvod do programování Přednáška 4
jedna = 1            # Lokalni promenna
$JEDNA = 1           # Globalni promenna

def dve
  jedna = 2          # Lokalni promenna uvnitr funkce
  $JEDNA = 2
end

puts   jedna
# =>   1
puts   $JEDNA
# =>   1

dve

puts   jedna
# =>   1
puts   $JEDNA
# =>   2




Proměnné a rozsah platnosti (scope)
Proměnné lokální, globální, tříd, instancí
promenne.rb



                                                        Úvod do programování Přednáška 4
a = Array.new

a = Array[ 1, 2, 3]

a = [ 1, 2, 3 ]

a = [ 'jedna', 'dve', 'tri' ]

a = %w{jedna dve tri}

a[0]
#=> 'jedna'




Složené datové typy


                                Úvod do programování Přednáška 4
15°C




        11°C




        8°C




        4°C




        0°C
               8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 24:00 1:00 2:00 3:00 4:00 5:00 6:00 7:00




Složené datové typy


                                                                                                                                 Úvod do programování Přednáška 4
book    = Hash.new( :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' )

book1 = { :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' }

book2 = { :jmeno => quot;Fernandoquot;, :prijmeni => quot;Pessoaquot;, :nazev => 'Kniha neklidu' }



books = [book1, book2]

require 'pp'
pp books[0]

puts books[0][:nazev]




Složené datové typy


                                                            Úvod do programování Přednáška 4
Složené datové typy


                      Úvod do programování Přednáška 4
police[3][10][:nazev]


Složené datové typy


                                   Úvod do programování Přednáška 4
puts [1, 2, 3] + [4, 5]

puts [1, 2, 3].to_s

puts [1, 2, 3].to_s * 2

puts [1, 2, 3].to_s.to_i * 2




Polymorfie a přetypování II


                               Úvod do programování Přednáška 4
2.to_s
quot;2 (ábyquot;.to_i

1.+(2)

File.open
Time.now

def pozdrav
  puts quot;Ahoj!quot;
end
pozdrav

def pozdrav(jmeno)   # Argument/parametr funkce
  puts quot;Vítaj, #{jmeno}!quot;
end
pozdrav('Honza')



Metody a funkce
metody.rb




                                                  Úvod do programování Přednáška 4
temperature = 25
# temperature = '20° C'




if temperature.to_i < 0 then
  puts quot;Vezmi si bundu, $álu a !epici!quot;
else
  puts quot;Vezmi si bundu!quot;
end




Podmínky
podminky.rb




                                          Úvod do programování Přednáška 4
temperature = 25
# temperature = '20° C'




if temperature.to_i < 0
  puts quot;Vezmi si bundu, $álu a !epici!quot;
elsif temperature.to_i > 0 && temperature.to_i < 20
  puts quot;Vezmi si bundu!quot;
else
  puts quot;Vezmi si tri!ko!quot;
end




Podmínky
podminky.rb




                                                      Úvod do programování Přednáška 4
temperature = 25
# temperature = '20° C'




case temperature.to_i
  when -999..0
    puts quot;Vezmi si bundu, $álu a !epici!quot;
  when 0..20
    puts quot;Vezmi si bundu!quot;
  else
    puts quot;Vezmi si tri!ko!quot;
end




Podmínky
podminky.rb




                                            Úvod do programování Přednáška 4
input = gets.chomp

case input
  when quot;kafkaquot;
    puts File.open('kafka.txt')
  when quot;exitquot;, quot;quitquot;
    exit
  when /.*posr.*/
    puts quot;Ale no tak...quot;
  when Fixnum
    puts quot;S !ísly tento program nepracuje!quot;
  else
    puts quot;Nerozumím pquot;íkazu: #{input}quot;
end




Podmínky
podminky.rb




                                              Úvod do programování Přednáška 4
temperature = 25
# temperature = '20° C'




puts quot;Vezmi si plavky!quot; if temperature.to_i > 30

puts quot;Pquot;ístup zamítnut!quot; unless user.is_admin?




Podmínky jako modifikátory
podminky.rb




                                                   Úvod do programování Přednáška 4
Logické (booleovské) operátory


                                 Úvod do programování Přednáška 4
1.upto 10 do |number|
  print number.to_s + '...'
end
puts quot;nquot;


x=1
until x > 100
  print x
  x += 1
end
puts quot;nquot;


[quot;jednaquot;, quot;dvequot;, quot;triquot;].each do |slovo|
  puts quot;* quot; + slovo
end




Smyčky a iterátory
smycky.rb




                                          Úvod do programování Přednáška 4
require 'net/http'

server = 'www.lidovky.cz'   # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...


begin
  response, data = Net::HTTP.new(server).get('/')
rescue Exception
  puts quot;Nemohu se pquot;ipojit na server #{server}quot;
  # ...na!teme data ulo(ená na disku...
  # data = ...
end
puts data.to_s.scan(
    /<div class=quot;art openerquot;><h3><a href=quot;.+quot;>(.*)</a></h3>/).to_s
  ) if data




Ošetření výjimek (exceptions)
vyjimky.rb




                                                                  Úvod do programování Přednáška 4
input = gets.chomp
puts quot;Prosím? Tady je $patn# sly$et, vy quot;íkáte '#{input}'?quot;



puts quot;Zadejte cenu bez DPH:quot;
input = gets
puts input.to_i + 0.19 * input.to_i



temperature = 20        temperature = '20 ºC'
                    quot;




Vstup
vstup.rb




                                                        Úvod do programování Přednáška 4
SQL Injection

name = 'bob'
query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;;
# SELECT * FROM customers WHERE username = 'bob'

name = quot;' OR 1'quot;
query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;;
# SELECT * FROM customers WHERE username = '' OR 1''




Ošetřování všech vstupů „zvenčí“
(typický případ je právě SQL Injection)




Vstup a jeho ošetření
vstup.rb




                                                        Úvod do programování Přednáška 4
Prostý text?      puts text.split(' ').uniq.sort


XML?              <words>
                    <word>a</word>
                    <word>aby</word>
                    …



PDF?

Obrázek — graf?




Výstup a jeho formátování


                                                   Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'




                               Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'

# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)


words   = text.tr('-,();'quot;', '').split(' ')


current_word = words.sort.first

word_counts = {}
word_counts[current_word] = {}

count = 0


words.sort.each do |word|
  if current_word == word
    count += 1
  else
    count = 1
    current_word = word
  end




                                       Když se Řehoř Samsa
  word_counts[word]         = {:word => word, :count => count}
end

nejpouzivanejsi = word_counts.sort.first         # quot;Nejvetsi = prvniquot;



                                       nepokojných snů, shle
puts quot;Za!ínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot;




                                       proměnil v jakýsi nestv
word_counts.sort.each do |word|
  nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count]
end



puts quot;Nejpou(ívan#j$í slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; v&skyty.quot;



                                                                                        Úvod do programování Přednáška 4
text = File.read 'kafka_promena.txt'

# --->)... a co seznam slov podle frekvence pouziti?

puts quot;Seznam nejpou(ívan#j$ích slov v Kafkov# ‚Prom#n#‘:quot;

most_frequent_words = word_counts.values.collect { |word| [word[:count], word
[:word]] }

most_frequent_words.sort.reverse.each_with_index do |word, i|
  puts quot;#{i+1}. #{word[1]}ttt(#{word[0]} v&skyt*)quot;
end




                              Když se Řehoř Samsa
                              nepokojných snů, shle
                              proměnil v jakýsi nestv
                                                        Úvod do programování Přednáška 4
Děkuji!
 !

More Related Content

More from Karel Minarik

Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Karel Minarik
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesKarel Minarik
 
CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the WebKarel Minarik
 
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Karel Minarik
 
Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Karel Minarik
 
Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Karel Minarik
 
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Karel Minarik
 
Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on RailsKarel Minarik
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7Karel Minarik
 
Úvod do programování 5
Úvod do programování 5Úvod do programování 5
Úvod do programování 5Karel Minarik
 
Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Karel Minarik
 
Historie programovacích jazyků
Historie programovacích jazykůHistorie programovacích jazyků
Historie programovacích jazykůKarel Minarik
 
Úvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeÚvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeKarel Minarik
 
Interaktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryInteraktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryKarel Minarik
 

More from Karel Minarik (14)

Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)Your Data, Your Search, ElasticSearch (EURUKO 2011)
Your Data, Your Search, ElasticSearch (EURUKO 2011)
 
Redis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational DatabasesRedis — The AK-47 of Post-relational Databases
Redis — The AK-47 of Post-relational Databases
 
CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the Web
 
Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)Spoiling The Youth With Ruby (Euruko 2010)
Spoiling The Youth With Ruby (Euruko 2010)
 
Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)Verzovani kodu s Gitem (Karel Minarik)
Verzovani kodu s Gitem (Karel Minarik)
 
Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]Představení Ruby on Rails [Junior Internet]
Představení Ruby on Rails [Junior Internet]
 
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
 
Úvod do Ruby on Rails
Úvod do Ruby on RailsÚvod do Ruby on Rails
Úvod do Ruby on Rails
 
Úvod do programování 7
Úvod do programování 7Úvod do programování 7
Úvod do programování 7
 
Úvod do programování 5
Úvod do programování 5Úvod do programování 5
Úvod do programování 5
 
Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)Úvod do programování 3 (to be continued)
Úvod do programování 3 (to be continued)
 
Historie programovacích jazyků
Historie programovacích jazykůHistorie programovacích jazyků
Historie programovacích jazyků
 
Úvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra strojeÚvod do programování aneb Do nitra stroje
Úvod do programování aneb Do nitra stroje
 
Interaktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzoryInteraktivita, originalita a návrhové vzory
Interaktivita, originalita a návrhové vzory
 

Úvod do programování 4

  • 1. Úvod do programování aneb Do nitra stroje PŘEDNÁŠKA Karel Minařík 4
  • 2. 1 Opakování Úvod do programování
  • 3. VYBAVENÍ 1. Konzole pro přímé zadání kódu 2. Editor 3. Dokumentace (!) Úvod do programování Přednáška 4
  • 4. ZÁKLADNÍ TYPY A OPERACE 1. Čísla 2. Texty (řetězce) 3. Pole 4. Aritmetické operace 5. Komentáře 6. Proměnné 7. Podmínky 8. Smyčky Úvod do programování Přednáška 4
  • 5. puts 1 + 1 !2 puts quot;1quot; + quot;1quot; ! quot;11quot; číslovka písmeno quot; puts (1 + 1).class puts (quot;1quot; + quot;1quot;).class Datové typy Úvod do programování Přednáška 4
  • 6. Počítač nedělá to, co chceme, aby dělal. Počítač dělá přesně to, co mu řekneme, aby dělal. Úvod do programování Přednáška 4
  • 7. puts 1 + 1 puts quot;1quot; + quot;1quot; puts 2 + 2 * 5 puts (2 + 2) * 5 puts quot;Ahojquot; + quot;Sároquot; puts quot;Ahojquot; + quot; quot; + quot;Sároquot; puts quot;Ahojquot; + 2 (!íslo není quot;et#zec) # puts quot;Ahojquot; + 2 (Tento pquot;íkaz Ruby pquot;esko!í a nebude je provád#t) puts quot;Nebudu ve $kole zlobitnquot; * 10 Aritmetické operace Úvod do programování Přednáška 4
  • 8. 2 Operace s textem Úvod do programování
  • 9. Když se Řehoř Samsa jednou ráno probudil z nepokojných snů, shledal, že se v posteli proměnil v jakýsi nestvůrný hmyz. Ležel na hřbetě tvrdém jak pancíř, a když trochu nadzvedl hlavu, uviděl své vyklenuté, hnědé břicho rozdělené obloukovitými výztuhami, na jehož vrcholu se sotva ještě držela přikrývka a tak tak že úplně nesklouzla dolů. Jeho četné, vzhledem k ostatnímu objemu žalostně tenké nohy se mu bezmocně komíhaly před očima. Co se to se mnou stalo? pomyslel si. Nebyl to sen. Jeho pokoj, správný, jen trochu příliš malý lidský pokoj, spočíval klidně mezi čtyřmi dobře známými stěnami, Nad stolem, na němž byla rozložena vybalená kolekce vzorků soukenného zboží - Samsa byl obchodní cestující -, visel obrázek, který si nedávno vystřihl z jednoho ilustrovaného časopisu a zasadil do pěkného pozlaceného rámu. Představoval dámu, opatřenou kožešinovou čapkou a kožešinovým boa, jak vzpřímeně sedí a nastavuje divákovi těžký kožešinový rukávník, v němž se jí ztrácí celé předloktí. Úvod do programování Přednáška 4
  • 10. text = File.read 'kafka_promena.txt' puts text # Vypise text puts text.upcase # Vypise text kapitalkami puts text.reverse # Vypise text pozpatku puts text.include? quot;otecquot; # Obsahuje text urcity vyraz? puts text.include? quot;fenomenologiequot; Když se Řehoř Samsa nepokojných snů, shle proměnil v jakýsi nestv Práce s textem Úvod do programování Přednáška 4
  • 11. text = File.read 'kafka_promena.txt' puts text.length # Pocet vsech znaku v textu puts text.delete(' ').length # Pocet znaku bez mezer puts text.split(quot;nquot;).length # Pocet radek puts text.split(quot;. quot;).length # Pocet vet puts text.split(/. |? |! /).length # Presnejsi pocet vet Regularni vyrazy berou v uvahu vety koncici otaznikem, vykricnikem puts text.split(' ').length # Pocet slov Když se Řehoř Samsa puts text.split(' ').uniq.length # Pocet jedinecnych slov nepokojných snů, shle puts text.split(' ').uniq.sort # Seznam jedinecnych slov usporadany podle abecedy proměnil v jakýsi nestv Úvod do programování Přednáška 4
  • 12. text = File.read 'kafka_promena.txt' puts text.gsub('%ehoquot;', 'Franz') # Zamen v textu 'Rehor' za 'Franz' puts text.gsub('e', 'a') # Nahradi 'e' za 'a' puts text.gsub('e', 'a').gsub('í','á'0.gsub('ou', 'ó').gsub('&', 'é').gsub('#', ''a').gsub('u', 'o') Když se Řehoř Samsa nepokojných snů, shle proměnil v jakýsi nestv Úvod do programování Přednáška 4
  • 13. # Integer # String # Array 1+1 quot;pokojquot;.upcase [1, 2, 3].length 2*2 quot;pokojquot;.include? [1, 2, 3].last 9/3 quot;pokojquot;.length [1, 2, 3].first 5.times quot;pokojquot;.delete [1, 2, 3].sort 5.upto 10 quot;pokojquot;.split [1, 2, 3].uniq [1, 2, 3].each www.ruby-doc.org/docs/ProgrammingRuby Úvod do programování Přednáška 4
  • 14. DOMÁCÍ ÚKOL text = File.read 'kafka_promena.txt' Prostudujte si dokumentaci Spočítejte, kolik normostran má Kafkova Proměna Úvod do programování Přednáška 4
  • 15. 3 Základní koncepty Úvod do programování
  • 16. puts quot;Ahojquot; + 2.to_s puts quot;2 (ábyquot;.to_i + 2 Přetypování Úvod do programování Přednáška 4
  • 17. puts quot;Nebudu ve $kole zlobitnquot; * 10 puts quot;Ahojquot; + quot; quot; + quot;Sároquot; Polymorfie (na příkladě operátorů) Úvod do programování Přednáška 4
  • 18. a=1 b=2 c=a+b puts c name = quot;Duchcovquot; puts quot;Vítá vás m#sto #{name}quot; Proměnné promenne.rb Úvod do programování Přednáška 4
  • 19. jedna = 1 # Lokalni promenna $JEDNA = 1 # Globalni promenna def dve jedna = 2 # Lokalni promenna uvnitr funkce $JEDNA = 2 end puts jedna # => 1 puts $JEDNA # => 1 dve puts jedna # => 1 puts $JEDNA # => 2 Proměnné a rozsah platnosti (scope) Proměnné lokální, globální, tříd, instancí promenne.rb Úvod do programování Přednáška 4
  • 20. a = Array.new a = Array[ 1, 2, 3] a = [ 1, 2, 3 ] a = [ 'jedna', 'dve', 'tri' ] a = %w{jedna dve tri} a[0] #=> 'jedna' Složené datové typy Úvod do programování Přednáška 4
  • 21. 15°C 11°C 8°C 4°C 0°C 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 24:00 1:00 2:00 3:00 4:00 5:00 6:00 7:00 Složené datové typy Úvod do programování Přednáška 4
  • 22. book = Hash.new( :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' ) book1 = { :jmeno => quot;Franzquot;, :prijmeni => quot;Kafkaquot;, :nazev => 'Prom#na' } book2 = { :jmeno => quot;Fernandoquot;, :prijmeni => quot;Pessoaquot;, :nazev => 'Kniha neklidu' } books = [book1, book2] require 'pp' pp books[0] puts books[0][:nazev] Složené datové typy Úvod do programování Přednáška 4
  • 23. Složené datové typy Úvod do programování Přednáška 4
  • 24. police[3][10][:nazev] Složené datové typy Úvod do programování Přednáška 4
  • 25. puts [1, 2, 3] + [4, 5] puts [1, 2, 3].to_s puts [1, 2, 3].to_s * 2 puts [1, 2, 3].to_s.to_i * 2 Polymorfie a přetypování II Úvod do programování Přednáška 4
  • 26. 2.to_s quot;2 (ábyquot;.to_i 1.+(2) File.open Time.now def pozdrav puts quot;Ahoj!quot; end pozdrav def pozdrav(jmeno) # Argument/parametr funkce puts quot;Vítaj, #{jmeno}!quot; end pozdrav('Honza') Metody a funkce metody.rb Úvod do programování Přednáška 4
  • 27. temperature = 25 # temperature = '20° C' if temperature.to_i < 0 then puts quot;Vezmi si bundu, $álu a !epici!quot; else puts quot;Vezmi si bundu!quot; end Podmínky podminky.rb Úvod do programování Přednáška 4
  • 28. temperature = 25 # temperature = '20° C' if temperature.to_i < 0 puts quot;Vezmi si bundu, $álu a !epici!quot; elsif temperature.to_i > 0 && temperature.to_i < 20 puts quot;Vezmi si bundu!quot; else puts quot;Vezmi si tri!ko!quot; end Podmínky podminky.rb Úvod do programování Přednáška 4
  • 29. temperature = 25 # temperature = '20° C' case temperature.to_i when -999..0 puts quot;Vezmi si bundu, $álu a !epici!quot; when 0..20 puts quot;Vezmi si bundu!quot; else puts quot;Vezmi si tri!ko!quot; end Podmínky podminky.rb Úvod do programování Přednáška 4
  • 30. input = gets.chomp case input when quot;kafkaquot; puts File.open('kafka.txt') when quot;exitquot;, quot;quitquot; exit when /.*posr.*/ puts quot;Ale no tak...quot; when Fixnum puts quot;S !ísly tento program nepracuje!quot; else puts quot;Nerozumím pquot;íkazu: #{input}quot; end Podmínky podminky.rb Úvod do programování Přednáška 4
  • 31. temperature = 25 # temperature = '20° C' puts quot;Vezmi si plavky!quot; if temperature.to_i > 30 puts quot;Pquot;ístup zamítnut!quot; unless user.is_admin? Podmínky jako modifikátory podminky.rb Úvod do programování Přednáška 4
  • 32. Logické (booleovské) operátory Úvod do programování Přednáška 4
  • 33. 1.upto 10 do |number| print number.to_s + '...' end puts quot;nquot; x=1 until x > 100 print x x += 1 end puts quot;nquot; [quot;jednaquot;, quot;dvequot;, quot;triquot;].each do |slovo| puts quot;* quot; + slovo end Smyčky a iterátory smycky.rb Úvod do programování Přednáška 4
  • 34. require 'net/http' server = 'www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel... begin response, data = Net::HTTP.new(server).get('/') rescue Exception puts quot;Nemohu se pquot;ipojit na server #{server}quot; # ...na!teme data ulo(ená na disku... # data = ... end puts data.to_s.scan( /<div class=quot;art openerquot;><h3><a href=quot;.+quot;>(.*)</a></h3>/).to_s ) if data Ošetření výjimek (exceptions) vyjimky.rb Úvod do programování Přednáška 4
  • 35. input = gets.chomp puts quot;Prosím? Tady je $patn# sly$et, vy quot;íkáte '#{input}'?quot; puts quot;Zadejte cenu bez DPH:quot; input = gets puts input.to_i + 0.19 * input.to_i temperature = 20 temperature = '20 ºC' quot; Vstup vstup.rb Úvod do programování Přednáška 4
  • 36. SQL Injection name = 'bob' query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;; # SELECT * FROM customers WHERE username = 'bob' name = quot;' OR 1'quot; query = quot;SELECT * FROM customers WHERE username = '#{name}'quot;; # SELECT * FROM customers WHERE username = '' OR 1'' Ošetřování všech vstupů „zvenčí“ (typický případ je právě SQL Injection) Vstup a jeho ošetření vstup.rb Úvod do programování Přednáška 4
  • 37. Prostý text? puts text.split(' ').uniq.sort XML? <words> <word>a</word> <word>aby</word> … PDF? Obrázek — graf? Výstup a jeho formátování Úvod do programování Přednáška 4
  • 38. text = File.read 'kafka_promena.txt' Úvod do programování Přednáška 4
  • 39. text = File.read 'kafka_promena.txt' # ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :) words = text.tr('-,();'quot;', '').split(' ') current_word = words.sort.first word_counts = {} word_counts[current_word] = {} count = 0 words.sort.each do |word| if current_word == word count += 1 else count = 1 current_word = word end Když se Řehoř Samsa word_counts[word] = {:word => word, :count => count} end nejpouzivanejsi = word_counts.sort.first # quot;Nejvetsi = prvniquot; nepokojných snů, shle puts quot;Za!ínáme s quot; + nejpouzivanejsi[1][:word].to_s + quot;.quot; proměnil v jakýsi nestv word_counts.sort.each do |word| nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] end puts quot;Nejpou(ívan#j$í slovo je „quot; + nejpouzivanejsi[1][:word] + quot;“ s quot; + nejpouzivanejsi[1][:count].to_s + quot; v&skyty.quot; Úvod do programování Přednáška 4
  • 40. text = File.read 'kafka_promena.txt' # --->)... a co seznam slov podle frekvence pouziti? puts quot;Seznam nejpou(ívan#j$ích slov v Kafkov# ‚Prom#n#‘:quot; most_frequent_words = word_counts.values.collect { |word| [word[:count], word [:word]] } most_frequent_words.sort.reverse.each_with_index do |word, i| puts quot;#{i+1}. #{word[1]}ttt(#{word[0]} v&skyt*)quot; end Když se Řehoř Samsa nepokojných snů, shle proměnil v jakýsi nestv Úvod do programování Přednáška 4