Ruby или зачем мне еще один язык программирования?
Сергей Алмазов
Тула - 2012
Ruby
Al2O
3
Сегодня будет 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"
Не такой страшный, как вы думаете
История
Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы.Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать.
Юкихиро Мацумото
Создатель языка Ruby
Ruby
• Скриптовый• Динамический• Объектно-Ориентированный• Рефлективный• Интерпретируемый• Высокоуровневый
Установка
Если в системе уже есть Ruby
(OSX/Lin) - Terminal$ ruby -v
(Win) - CMD> ruby -vruby 1.9.3p125 (2012-02-16) [i386-mingw32]
Win• http://railsinstaller.org/• Большая зеленая кнопка “Download the KIT”
• Простой Setup
OSX
1. Установить Xcode2. Установить GCC3. $ curl -L get.rvm.io | bash -s stable4. http://russian.railstutorial.org
Lin (Ubuntu)
Установка через RVM:$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
Поехали!
Ruby – объектно-ориентированный
Все есть объект Числа, блоки кода, вообще все!
3.Times doputs “Hello ” + “tula”.capitalize
end
Будет выведено:Hello TulaHello TulaHello Tule
Все есть объект!full = “serge almazov”names = full.split
until names.empty?names.first.capitalize!puts names.shift
end
Вывод:SergeAlmazov
Простой, гибкий синтаксис
Простые определения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
Основы Ruby
Вызов метода:“Serge”.reverse=> “egreS”
“Serge”.lenght=> 5
reverse и length – это методы
Создание методаstr = "Serge"
def str.MyFunc name puts "Hello, "+nameend
puts str.MyFunc str
=> Hello, Serge
name – параметр метода MyFunc - имя метода
Создание методаstr = "Serge"
def str.MyFunc name = “Tom” puts "Hello, " + nameend
puts str.MyFunc
=> Hello, Tom
Можно и так
str = "Serge"
def str.MyFunc(name = "Tom") puts "Hello, "+name
end
puts str.MyFunc
Работа со строками
> 40.reverse=>#<NoMethodError: undefined method `reverse' for 40:Fixnum>
> 40.to_s.reverseÞ "04“
Так лучше!to_s приводит к типу “string”
Приведение к типу
• to_s конвертит в строки• to_i конвертит в числа• to_a конвертит в массивы
Массивы
> [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]
Классы
class Creaturedef set_creature(aName) @myname=aNameenddef get_creature return(@myname)endend
myCreature = Creature.newmyCreature.set_creature(‘Cat')puts(myCreature.get_creature)
Если не нравятся классы
Можно про них забыть
Просто пишем в процедурном стиле
def factorial (n) (2..n).inject do |p, v| p*v end end
puts factorial(4)
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!
IDE
• JetBrains RubyMine• Aptana• Eclipse + RDT• IntelliJ IDEA + Ruby plugin• Visual Studio• Xcode 3.1• Блокнот... =)
Rails – это:
КроссплатформенныйОткрытый под лицензией MITFramework для web-приложенийПостроен по принципу MVC
+
Как это работает?
Dynamic Language Runtime (DLR)DLR основан на CLRОбеспечивает языковые сервисы для динамических языков:• Динамическая система типов для всех языков,
которые используют сервисы DLR• Hosting API• Dynamic code generation• Dynamic method dispatch
Установка
http://www.ironruby.net/
Visual Studio
Примеры
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
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
Использование DLL в IronRuby
C# Library
namespace MySuperLibrary{ public class MySuperClass { public string MySuperFunction() { return "This is super function! =)\n"; } }}
IronRuby
require 'D:\MySuperLibrary.dll'
myclass= MySuperLibrary::MySuperClass.newprint myclass.MySuperFunction
Кто использует Ruby?
Для энтузиастов
• MacRuby (Ruby for Mac)• Jruby (Ruby on the JVM)• ruby-opencl (dev for heterogeneous
systems)• Rhodes (iPhone/iPad dev)• Chingu – Game Engine
Преимущества Ruby
“Простой очень. В 2 раза меньше программистов надо, ПО недорогое”
- Евгения Казина (руководитель туристического стартапа)
“В целом язык обладает мощным синтаксисом блоков и красотой строк”
- Silentip, Google Q&A
Зачем мне еще один язык программирования?
Benefits
• Win/Lin/OSX• Бесплатное использование• Удобный синтаксис• Быстрая разработка• Хостинг дешевле, чем на .Net• Автоматизация рутинных действий
Полезные ссылки
• http://ru.wikibooks.org/wiki/Ruby• http://
russian.railstutorial.org/chapters/beginning• IronRuby Unleashed (2010)• Крис Пайн – “Учись программировать!”
Контакты
Twitter: @SergeAlmazovSkype: a-staffordshireEmail: [email protected]: developerzone.ru
Top Related