Slide 1

Slide 1 text

Ruby

Slide 2

Slide 2 text

#include ! int main() { printf("Hello world!"); } C C++ Java C#

Slide 3

Slide 3 text

#include ! int main() { cout << "Hello world!"; } C C++ Java C#

Slide 4

Slide 4 text

public class HelloWorld { public static void main(String[] args) { System.out.print(“Hello world!”); } } C C++ Java C#

Slide 5

Slide 5 text

public class HelloWorld { public static void Main(String[] args) { System.Console.Write(“Hello world!”); } } C C++ Java C#

Slide 6

Slide 6 text

print “Hello world!” Ruby

Slide 7

Slide 7 text

Nastanak Yukihiro Matsumoto Smalltalk Perl

Slide 8

Slide 8 text

Ruby • Viši programski jezik

Slide 9

Slide 9 text

C int array[] = {1, 2, 3, 4, 5, 6}, sum = 0; ! for (int idx = 0; idx < 6; idx++) { sum += array[idx]; }

Slide 10

Slide 10 text

(1..6).inject(:+) Ruby

Slide 11

Slide 11 text

Ruby • Viši programski jezik • Interpretirani

Slide 12

Slide 12 text

C/C++ #include #include ! int factorial(n) { int result = 1, i; for (i = 1; i <= n; i++) result *= i; return result; } ! int main() { int f = factorial(3); printf("3! = %d\n", f); return 0; } 0010111001011100011101 0100011110001101000110 0101110100111000000110 1000000101001000001111 1110111100001010000011 1110000110100110111000 1001101010111110100110 1110000010100001001111 0001010110000001111100 1101111001011101011100 1100101001011110001110 1000010111110100110000 0101110100001011111111 1011001000110111000111 1111001010110100011000 3! = 6

Slide 13

Slide 13 text

Ruby def factorial(n) result = 1 for i in [1..n] result *= i end result end ! f = factorial(3) print "3! = #{f}" 3! = 6

Slide 14

Slide 14 text

Ruby • Viši programski jezik • Interpretirani • Objektno-orijentiran

Slide 15

Slide 15 text

C++ – hibrid string(“Hello”).size(); //=> 5 ! "Hello".size(); //=> ? // error: member reference base type 'const char [6]' is not a structure or union

Slide 16

Slide 16 text

Ruby String.new(“Hello”).size #=> 5 ! “Hello".size #=> 5 “Hello” String.new(“Hello”)

Slide 17

Slide 17 text

Ruby • Viši programski jezik • Interpretirani • Objektno-orjentiran • Dinamički • Garbage collector

Slide 18

Slide 18 text

C/C++ int* array = (int*)malloc(...); ! // Akcije... ! free(array); class MyClass { ~MyClass() { ... } };

Slide 19

Slide 19 text

Generalno

Slide 20

Slide 20 text

Object String Integer Float Time Array Hash Numeric

Slide 21

Slide 21 text

Nema primitivnih tipova "A string".class #=> String 1234598.class #=> Integer 3.14.class #=> Float [1, 2, 3].class #=> Array

Slide 22

Slide 22 text

Metode

Slide 23

Slide 23 text

C++ class Converter { double degree_to_farenheit(int degree) { // ... } }; Converter converter; converter.degree_to_farenheit(30);

Slide 24

Slide 24 text

C# class Converter { double DegreeToFarenheit(int degree) { // ... } }; Converter converter; converter.DegreeToFarenheit(30);

Slide 25

Slide 25 text

C# Converter converter = new Converter(); Error: class Converter is abstract, it cannot be instantiated public abstract partial sealed class Converter { protected override static virtual double D… { // ... } }

Slide 26

Slide 26 text

C# class CurrencyConverter : Converter { } Error: class Converter is sealed, it cannot be inherited from public abstract partial sealed class Converter { protected override static virtual double D… { // ... } }

Slide 27

Slide 27 text

Ruby class Converter def degree_to_farenheit(degree) # ... end end converter = Converter.new converter.degree_to_farenheit(30) class Converter def degree_to_farenheit(degree) return degree * 1.8 + 32 end end class Converter def degree_to_farenheit(degree) degree * 1.8 + 32 end end

Slide 28

Slide 28 text

“String”.empty?() #=> false Konvencije imenovanja “String”.empty? #=> false ! post.delete if user.moderator? str = “String” str.upcase! str #=> “STRING”

Slide 29

Slide 29 text

class Array def first self[0] end end Proširenje klasa [1, 2, 3].first #=> 1

Slide 30

Slide 30 text

28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 Pon Uto Sri Čet Pet Sub Ned 2.days.ago

Slide 31

Slide 31 text

28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 Pon Uto Sri Čet Pet Sub Ned 1.week.from_now

Slide 32

Slide 32 text

class Shirt def end ! def end ! def end ! def end end s m l xl Metaprogramiranje

Slide 33

Slide 33 text

class Shirt for size in [“ ”, “ ”, “ ”, “ ”] define_method(size) do # ... end end end Metaprogramiranje s m l xl

Slide 34

Slide 34 text

Tipovi

Slide 35

Slide 35 text

Numeric Integer Complex Rational Float

Slide 36

Slide 36 text

1000000000 1_000_000_000 ! 5.even? #=> false 5.odd? #=> true 2 ** 3 #=> 8 ! 3.52.round #=> 4 3.52.floor #=> 3 3.2.ceil #=> 4 ! c = Complex(1,1) #=> (1+1i) c.conjugate #=> (1-1i) c.real? #=> false c.angle #=> 1/4 * π

Slide 37

Slide 37 text

Cijeli brojevi . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 1 2 3 4 5 6 59 60 61 62 63 64 • Reprezentirani s 64 bita 0 1 7 58 264-1 0 ➞ 264 brojeva . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 2 3 4 5 6 59 60 61 62 63 0 1 7 58 1

Slide 38

Slide 38 text

Cijeli brojevi . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 1 2 3 4 5 6 59 60 61 62 63 64 • Reprezentirani s 64 bita 0 1 7 58 ➞ 264 brojeva . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 2 3 4 5 6 59 60 61 62 63 0 1 7 58 1 263-1 -263 +/- 264-1 0

Slide 39

Slide 39 text

Cijeli brojevi . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 1 2 3 4 5 6 59 60 61 62 63 64 • Reprezentirani s 64 bita 0 1 7 58 ➞ 264 brojeva . . . . . 0 1 1 0 0 1 0 0 1 0 1 1 2 3 4 5 6 59 60 61 62 63 0 1 7 58 1 262-1 -262 +/- 263-1 -263 264-1 0

Slide 40

Slide 40 text

#include #include using namespace std; ! int main() { cout << LLONG_MAX << endl; cout << LLONG_MAX + 1 << endl; } 9223372036854775807 -9223372036854775808

Slide 41

Slide 41 text

4611686018427387903 4611686018427387904 max_integer = 2 ** 62 - 1 ! print max_integer print max_integer + 1 4611686018427387903.class #=> Fixnum 4611686018427387904.class #=> Bignum

Slide 42

Slide 42 text

1 / 0 # ZeroDivisionError: divided by 0 ! 1.0 / 0.0 # => Infinity infinity = 1.0 / 0.0 ! infinity + 1 #=> Infinity infinity > 2 ** 100 #=> true ! infinity + infinity #=> Infinity infinity - infinity #=> NaN

Slide 43

Slide 43 text

String

Slide 44

Slide 44 text

“String”.empty? #=> false “String”.include?(“ri”) #=> true ! “String”.downcase #=> “string” “String”.reverse #=> “gnirtS” ! “%d %s” % [var1, var2] “#{var1} #{var2}”

Slide 45

Slide 45 text

Array

Slide 46

Slide 46 text

[1, 2, 3] [“a”, “b”, “c”] ! [1, 2, 3].any? #=> true [1, 2, 3].include?(10) #=> false ! [1, 2, 3].reverse #=> [3, 2, 1] [3, 1, 2].sort #=> [1, 2, 3] ! [1, 2] + [3, 4] #=> [1, 2, 3, 4] ! for number in [1, 2, 3] # ... end

Slide 47

Slide 47 text

Hash

Slide 48

Slide 48 text

hash = { “Pero Perić” => “Matematika”, “Ana Anić” => “Biologija”, } ! hash[“Pero Perić”] #=> “Matematika” hash[“Ana Anić”] #=> “Biologija”

Slide 49

Slide 49 text

{“a” => “b”}.has_key?(“c”) #=> false {“a” => “b”}.has_value?(“b”) #=> true ! {“a” => “b”}.invert #=> {“b” => “a”} {“a” => “b”}.merge(“c” => “d”) #=> {“a” => “b”, “c” => “d”}

Slide 50

Slide 50 text

Range

Slide 51

Slide 51 text

(1..10) (1..10).cover?(7) #=> true (1..10).cover?(11) #=> false ! (“a”..”z”) (“a”..”z”).cover?(“d”) #=> true ! (xmas..easter).cover?(new_year) #=> true [“a”, “b”, “c”, “d”][1..2] #=> [“b”, “c”] “Some string”[2..6] #=> “me st”

Slide 52

Slide 52 text

if (percentage >= 90) 5; else if (percentage >= 75 && percentage < 90) 4; else if (percentage >= 60 && percentage < 75) 3; else if (percentage >= 50 && percentage < 60) 2; else 1;

Slide 53

Slide 53 text

case percentage when 90..100 then 5 when 75..89 then 4 when 60..74 then 3 when 50..59 then 2 else 1 end

Slide 54

Slide 54 text

Blokovi

Slide 55

Slide 55 text

{ print “Hello world” } ! 5.times { print “Hello world” } ! { print “Hello world” } ! 5.times { print “Hello world” } { print “Hello world” } ! 5.times { print “Hello world” } ! do print “Hello world” end ! 5.times do print “Hello world” end

Slide 56

Slide 56 text

class Integer def times ! ! ! end end class Integer def times(&block) ! ! ! end end class Integer def times(&block) for n in [1..self] ! end end end class Integer def times(&block) for n in [1..self] block.call end end end

Slide 57

Slide 57 text

class Integer def times(&block) for n in [1..self] block.call end end end class Integer def times(&block) for n in [1..self] block.call(n) end end end 5.times do print “Hello world” print “Number of calls: #{…}” end 5.times do |n| print “Hello world” print “Number of calls: #{…}” end 5.times do |n| print “Hello world” print “Number of calls: #{n}” end

Slide 58

Slide 58 text

[1, 2, 3, 4, 5, 6, 7, 8] .select { |n| n.even? } #=> [2, 4, 6, 8] .map { |n| n + 1 } #=> [3, 5, 7, 9] .reject { |n| n > 7 } #=> [3, 5, 7] .find { |n| n > 3 } #=> 5

Slide 59

Slide 59 text

Moduli

Slide 60

Slide 60 text

module MyModule def my_module_method # ... end end ! MyModule.new #=> Error class MyClass include MyModule end ! instance = MyClass.new instance.my_module_method

Slide 61

Slide 61 text

class Person ! ! ! ! ! end class Person include Comparable ! ! ! ! end class Person include Comparable ! def <=>(other) self.surname <=> other.surname end end person1 <= person2 person1 < person2 person1 >= person2 person1 > person2 person1 == person2 person1 != person2

Slide 62

Slide 62 text

class Set ! ! ! ! ! end class Set include Enumerable ! ! ! ! end class Set include Enumerable ! def each(&block) collection.each(&block) end end people = Set.new(array) ! people.any? people.find { |person| ... } people.include?(...) people.select { |person| ... }

Slide 63

Slide 63 text

Introspekcija

Slide 64

Slide 64 text

[1, 2, 3].class #=> Array Array.superclass #=> Object ! “A string”.methods #=> [:empty?, :length, :upcase, …] ! 1.23.respond_to?(:round) #=> true ! String.included_modules #=> [Comparable, …]

Slide 65

Slide 65 text

No content