5. Сегодня будет Ruby
class C def method_missing(name, *args) "a Ghost
Method" end end obj = C.new obj.to_s # =>
"#<C:0x357258>" class C instance_methods.each
do |m| undef_method m unless m.to_s =~
/object_id|method_missing|respond_to?|^__/ end
end obj.to_s # => "a Ghost Method"
7. История
Человек создан для творчества, и я всегда
знал, что люблю творить. Увы, я обделѐн
талантом художника или музыканта. Зато
умею писать программы.
Я хочу, чтобы компьютер был моим слугой,
а не господином, поэтому я должен уметь
быстро и эффективно объяснить ему, что
делать.
Юкихиро Мацумото
16. Ruby – объектно-ориентированный
Все есть объект
Числа, блоки кода, вообще все!
3.Times do
puts “Hello ” +
“tula”.capitalize
end
Будет выведено:
Hello Tula
Hello Tula
Hello Tule
17. Все есть объект!
full = “serge almazov”
names = full.split
until names.empty?
names.first.capitalize!
puts names.shift
end
Вывод:
Serge
Almazov
18. Простой, гибкий синтаксис
Простые определения nums = [1, 2, 3, 4, 5]
local_var = … sum = nums.inject do |s, v|
@instance_var = … end
s+v
$global_var = …
prod = nums.inject {|p, v|
do…end либо {…} p * v
}
Обработка исключений
Строковая интерполяция begin
sum / 0
rescue ZeroDivisionError
puts "Error: #{sum} / 0"
end
20. Создание метода
str = "Serge"
def str.MyFunc name
puts "Hello, "+name
end
puts str.MyFunc str
=> Hello, Serge
name – параметр метода
MyFunc - имя метода
21. Создание метода
str = "Serge"
def str.MyFunc name = “Tom”
puts "Hello, " + name
end
puts str.MyFunc
=> Hello, Tom
22. Можно и так
str = "Serge"
def str.MyFunc(name = "Tom")
puts "Hello, "+name
end
puts str.MyFunc
23. Работа со строками
> 40.reverse
=>
#<NoMethodError: undefined method `reverse'
for 40:Fixnum>
> 40.to_s.reverse
"04“
Так лучше!
to_s приводит к типу “string”
24. Приведение к типу
• to_s конвертит в строки
• to_i конвертит в числа
• to_a конвертит в массивы
26. Классы
class Creature
def set_creature(aName)
@myname=aName
end
def get_creature
return(@myname)
end
end
myCreature = Creature.new
myCreature.set_creature(‘Cat')
puts(myCreature.get_creature)
27. Если не нравятся классы
Можно про них def factorial (n)
(2..n).inject do |p, v|
забыть p*v
Просто пишем в end
end
процедурном
стиле puts factorial(4)
28. Reflection
class Greeter
def initialize( greeting )
@greeting = greeting
end
def method_missing( m )
name = m.to_s.capitalize
"#{@greeting} #{name}!"
end
end
hello = Greeter.new("Hello")
puts hello.james
Вывод:
Hello James!
29. IDE
• JetBrains RubyMine
• Aptana
• Eclipse + RDT
• IntelliJ IDEA + Ruby plugin
• Visual Studio
• Xcode 3.1
• Блокнот... =)
33. Как это работает?
Dynamic Language Runtime (DLR)
DLR основан на CLR
Обеспечивает языковые сервисы для
динамических языков:
• Динамическая система типов для всех языков,
которые используют сервисы DLR
• Hosting API
• Dynamic code generation
• Dynamic method dispatch
45. Для энтузиастов
• MacRuby (Ruby for Mac)
• Jruby (Ruby on the JVM)
• ruby-opencl (dev for heterogeneous
systems)
• Rhodes (iPhone/iPad dev)
• Chingu – Game Engine
46. Преимущества Ruby
“Простой очень. В 2 раза меньше программистов надо,
ПО недорогое”
- Евгения Казина (руководитель туристического стартапа)
“В целом язык обладает мощным синтаксисом блоков и
красотой строк”
- Silentip, Google Q&A
48. Benefits
• Win/Lin/OSX
• Бесплатное использование
• Удобный синтаксис
• Быстрая разработка
• Хостинг дешевле, чем на .Net
• Автоматизация рутинных действий