Ruby - или зачем мне еще один язык программирования?
-
Upload
pavel-tsukanov -
Category
Documents
-
view
4.694 -
download
1
description
Transcript of Ruby - или зачем мне еще один язык программирования?
![Page 1: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/1.jpg)
Ruby или зачем мне еще один язык программирования?
Сергей Алмазов
Тула - 2012
![Page 2: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/2.jpg)
![Page 3: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/3.jpg)
Ruby
Al2O
3
![Page 4: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/4.jpg)
![Page 5: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/5.jpg)
Сегодня будет 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"
![Page 6: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/6.jpg)
Не такой страшный, как вы думаете
![Page 7: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/7.jpg)
История
Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы.Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать.
Юкихиро Мацумото
![Page 8: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/8.jpg)
Создатель языка Ruby
![Page 9: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/9.jpg)
Ruby
• Скриптовый• Динамический• Объектно-Ориентированный• Рефлективный• Интерпретируемый• Высокоуровневый
![Page 10: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/10.jpg)
Установка
![Page 11: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/11.jpg)
Если в системе уже есть Ruby
(OSX/Lin) - Terminal$ ruby -v
(Win) - CMD> ruby -vruby 1.9.3p125 (2012-02-16) [i386-mingw32]
![Page 12: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/12.jpg)
Win• http://railsinstaller.org/• Большая зеленая кнопка “Download the KIT”
• Простой Setup
![Page 13: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/13.jpg)
OSX
1. Установить Xcode2. Установить GCC3. $ curl -L get.rvm.io | bash -s stable4. http://russian.railstutorial.org
![Page 14: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/14.jpg)
Lin (Ubuntu)
Установка через RVM:$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
![Page 15: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/15.jpg)
Поехали!
![Page 16: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/16.jpg)
Ruby – объектно-ориентированный
Все есть объект Числа, блоки кода, вообще все!
3.Times doputs “Hello ” + “tula”.capitalize
end
Будет выведено:Hello TulaHello TulaHello Tule
![Page 17: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/17.jpg)
Все есть объект!full = “serge almazov”names = full.split
until names.empty?names.first.capitalize!puts names.shift
end
Вывод:SergeAlmazov
![Page 18: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/18.jpg)
Простой, гибкий синтаксис
Простые определенияlocal_var = …@instance_var = …$global_var = …
do…end либо {…} Обработка исключений Строковая интерполяция
nums = [1, 2, 3, 4, 5]
sum = nums.inject do |s, v|s+v
end
prod = nums.inject {|p, v|p * v
}
beginsum / 0
rescue ZeroDivisionErrorputs "Error: #{sum} /
0"end
![Page 19: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/19.jpg)
Основы Ruby
Вызов метода:“Serge”.reverse=> “egreS”
“Serge”.lenght=> 5
reverse и length – это методы
![Page 20: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/20.jpg)
Создание методаstr = "Serge"
def str.MyFunc name puts "Hello, "+nameend
puts str.MyFunc str
=> Hello, Serge
name – параметр метода MyFunc - имя метода
![Page 21: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/21.jpg)
Создание методаstr = "Serge"
def str.MyFunc name = “Tom” puts "Hello, " + nameend
puts str.MyFunc
=> Hello, Tom
![Page 22: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/22.jpg)
Можно и так
str = "Serge"
def str.MyFunc(name = "Tom") puts "Hello, "+name
end
puts str.MyFunc
![Page 23: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/23.jpg)
Работа со строками
> 40.reverse=>#<NoMethodError: undefined method `reverse' for 40:Fixnum>
> 40.to_s.reverseÞ "04“
Так лучше!to_s приводит к типу “string”
![Page 24: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/24.jpg)
Приведение к типу
• to_s конвертит в строки• to_i конвертит в числа• to_a конвертит в массивы
![Page 25: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/25.jpg)
Массивы
> [12,15,185]=> [12, 15, 185]
> [12, 45, 35].max=> 45
Можно присвоить к переменной> mysuperarray = [5,555,25,45,35,125,15]=> [5, 555, 25, 45, 35, 125, 15]
Отсортируем массив ;)> mysuperarray.sort=> [5, 15, 25, 35, 45, 125, 555]
![Page 26: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/26.jpg)
Классы
class Creaturedef set_creature(aName) @myname=aNameenddef get_creature return(@myname)endend
myCreature = Creature.newmyCreature.set_creature(‘Cat')puts(myCreature.get_creature)
![Page 27: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/27.jpg)
Если не нравятся классы
Можно про них забыть
Просто пишем в процедурном стиле
def factorial (n) (2..n).inject do |p, v| p*v end end
puts factorial(4)
![Page 28: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/28.jpg)
Reflection
class Greeter def initialize( greeting ) @greeting = greeting end def method_missing( m ) name = m.to_s.capitalize "#{@greeting} #{name}!" endend hello = Greeter.new("Hello")puts hello.james
Вывод:Hello James!
![Page 29: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/29.jpg)
IDE
• JetBrains RubyMine• Aptana• Eclipse + RDT• IntelliJ IDEA + Ruby plugin• Visual Studio• Xcode 3.1• Блокнот... =)
![Page 30: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/30.jpg)
![Page 31: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/31.jpg)
Rails – это:
КроссплатформенныйОткрытый под лицензией MITFramework для web-приложенийПостроен по принципу MVC
![Page 32: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/32.jpg)
+
![Page 33: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/33.jpg)
Как это работает?
Dynamic Language Runtime (DLR)DLR основан на CLRОбеспечивает языковые сервисы для динамических языков:• Динамическая система типов для всех языков,
которые используют сервисы DLR• Hosting API• Dynamic code generation• Dynamic method dispatch
![Page 34: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/34.jpg)
Установка
![Page 35: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/35.jpg)
http://www.ironruby.net/
![Page 36: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/36.jpg)
Visual Studio
![Page 37: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/37.jpg)
Примеры
![Page 38: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/38.jpg)
IronRuby inside C#using Microsoft.Scripting.Hosting;
namespace CSharpAndRuby{ class Program { static void Main(string[] args) { //IronRuby inside C# Console App ScriptEngine engine = IronRuby.Ruby.CreateEngine(); ScriptSource source = engine.CreateScriptSourceFromString("puts 'Hello from IronRuby'"); source.Execute(); } }}
> Hello from IronRuby
![Page 39: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/39.jpg)
C# -> IronRuby -> C#ScriptEngine engine = IronRuby.Ruby.CreateEngine();ScriptScope scope = engine.CreateScope();string myStr = "TulaDev.Net";scope.SetVariable("str", myStr);engine.Execute("self.str = self.str + ' - Ruby Presentation'", scope);var outstr = scope.GetVariable("str");Console.WriteLine(outstr);
Console Output:> TulaDev.Net – Ruby Presentation
![Page 40: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/40.jpg)
Использование DLL в IronRuby
![Page 41: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/41.jpg)
C# Library
namespace MySuperLibrary{ public class MySuperClass { public string MySuperFunction() { return "This is super function! =)\n"; } }}
![Page 42: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/42.jpg)
IronRuby
require 'D:\MySuperLibrary.dll'
myclass= MySuperLibrary::MySuperClass.newprint myclass.MySuperFunction
![Page 43: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/43.jpg)
Кто использует Ruby?
![Page 44: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/44.jpg)
![Page 45: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/45.jpg)
Для энтузиастов
• MacRuby (Ruby for Mac)• Jruby (Ruby on the JVM)• ruby-opencl (dev for heterogeneous
systems)• Rhodes (iPhone/iPad dev)• Chingu – Game Engine
![Page 46: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/46.jpg)
Преимущества Ruby
“Простой очень. В 2 раза меньше программистов надо, ПО недорогое”
- Евгения Казина (руководитель туристического стартапа)
“В целом язык обладает мощным синтаксисом блоков и красотой строк”
- Silentip, Google Q&A
![Page 47: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/47.jpg)
Зачем мне еще один язык программирования?
![Page 48: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/48.jpg)
Benefits
• Win/Lin/OSX• Бесплатное использование• Удобный синтаксис• Быстрая разработка• Хостинг дешевле, чем на .Net• Автоматизация рутинных действий
![Page 49: Ruby - или зачем мне еще один язык программирования?](https://reader033.fdocuments.us/reader033/viewer/2022052901/556cc9bed8b42aba548b504a/html5/thumbnails/49.jpg)
Полезные ссылки
• http://ru.wikibooks.org/wiki/Ruby• http://
russian.railstutorial.org/chapters/beginning• IronRuby Unleashed (2010)• Крис Пайн – “Учись программировать!”