Ruby - или зачем мне еще один язык программирования?

6,164 views
5,925 views

Published on

Расскажу зачем он нужен мне, а вы решите зачем он нужен вам. Также рассмотрю его реализацию на платформе .Net - IronRuby

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,164
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
39
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ruby - или зачем мне еще один язык программирования?

  1. 1. Ruby или зачем мне еще один язык программирования? Сергей Алмазов Тула - 2012
  2. 2. RubyAl2O3
  3. 3. Сегодня будет Rubyclass C def method_missing(name, *args) "a GhostMethod" end end obj = C.new obj.to_s # =>"#<C:0x357258>" class C instance_methods.eachdo |m| undef_method m unless m.to_s =~/object_id|method_missing|respond_to?|^__/ endend obj.to_s # => "a Ghost Method"
  4. 4. Не такой страшный, как вы думаете
  5. 5. ИсторияЧеловек создан для творчества, и я всегдазнал, что люблю творить. Увы, я обделѐнталантом художника или музыканта. Затоумею писать программы.Я хочу, чтобы компьютер был моим слугой,а не господином, поэтому я должен уметьбыстро и эффективно объяснить ему, чтоделать. Юкихиро Мацумото
  6. 6. Создатель языка Ruby
  7. 7. Ruby• Скриптовый• Динамический• Объектно-Ориентированный• Рефлективный• Интерпретируемый• Высокоуровневый
  8. 8. Установка
  9. 9. Если в системе уже есть Ruby(OSX/Lin) - Terminal$ ruby -v(Win) - CMD> ruby -vruby 1.9.3p125 (2012-02-16) [i386-mingw32]
  10. 10. Win• http://railsinstaller.org/• Большая зеленая кнопка “Download the KIT”• Простой Setup
  11. 11. OSX1. Установить Xcode2. Установить GCC3. $ curl -L get.rvm.io | bash -s stable4. http://russian.railstutorial.org
  12. 12. Lin (Ubuntu)Установка через RVM:$ bash -s stable < <(curl -shttps://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
  13. 13. Поехали!
  14. 14. Ruby – объектно-ориентированный Все есть объект  Числа, блоки кода, вообще все! 3.Times do puts “Hello ” + “tula”.capitalize end Будет выведено: Hello Tula Hello Tula Hello Tule
  15. 15. Все есть объект!full = “serge almazov”names = full.splituntil names.empty? names.first.capitalize! puts names.shiftendВывод:SergeAlmazov
  16. 16. Простой, гибкий синтаксис Простые определения 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
  17. 17. Основы RubyВызов метода:“Serge”.reverse=> “egreS”“Serge”.lenght=> 5reverse и length – это методы
  18. 18. Создание методаstr = "Serge"def str.MyFunc name puts "Hello, "+nameendputs str.MyFunc str=> Hello, Sergename – параметр методаMyFunc - имя метода
  19. 19. Создание методаstr = "Serge"def str.MyFunc name = “Tom” puts "Hello, " + nameendputs str.MyFunc=> Hello, Tom
  20. 20. Можно и такstr = "Serge"def str.MyFunc(name = "Tom") puts "Hello, "+nameendputs str.MyFunc
  21. 21. Работа со строками> 40.reverse=>#<NoMethodError: undefined method `reversefor 40:Fixnum>> 40.to_s.reverse "04“Так лучше!to_s приводит к типу “string”
  22. 22. Приведение к типу• to_s конвертит в строки• to_i конвертит в числа• to_a конвертит в массивы
  23. 23. Массивы> [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]
  24. 24. Классыclass Creaturedef set_creature(aName) @myname=aNameenddef get_creature return(@myname)endendmyCreature = Creature.newmyCreature.set_creature(‘Cat)puts(myCreature.get_creature)
  25. 25. Если не нравятся классы Можно про них def factorial (n) (2..n).inject do |p, v| забыть p*v Просто пишем в end end процедурном стиле puts factorial(4)
  26. 26. Reflectionclass Greeter def initialize( greeting ) @greeting = greeting end def method_missing( m ) name = m.to_s.capitalize "#{@greeting} #{name}!" endendhello = Greeter.new("Hello")puts hello.jamesВывод:Hello James!
  27. 27. IDE• JetBrains RubyMine• Aptana• Eclipse + RDT• IntelliJ IDEA + Ruby plugin• Visual Studio• Xcode 3.1• Блокнот... =)
  28. 28. Rails – это:КроссплатформенныйОткрытый под лицензией MITFramework для web-приложенийПостроен по принципу MVC
  29. 29. +
  30. 30. Как это работает?Dynamic Language Runtime (DLR)DLR основан на CLRОбеспечивает языковые сервисы длядинамических языков:• Динамическая система типов для всех языков, которые используют сервисы DLR• Hosting API• Dynamic code generation• Dynamic method dispatch
  31. 31. Установка
  32. 32. http://www.ironruby.net/
  33. 33. Visual Studio
  34. 34. Примеры
  35. 35. 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("putsHello from IronRuby"); source.Execute(); } }}> Hello from IronRuby
  36. 36. 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 + - RubyPresentation", scope);var outstr = scope.GetVariable("str");Console.WriteLine(outstr);Console Output:> TulaDev.Net – Ruby Presentation
  37. 37. Использование DLL в IronRuby
  38. 38. C# Librarynamespace MySuperLibrary{ public class MySuperClass { public string MySuperFunction() { return "This is super function! =)n"; } }}
  39. 39. IronRubyrequire D:MySuperLibrary.dllmyclass= MySuperLibrary::MySuperClass.newprint myclass.MySuperFunction
  40. 40. Кто использует Ruby?
  41. 41. Для энтузиастов• MacRuby (Ruby for Mac)• Jruby (Ruby on the JVM)• ruby-opencl (dev for heterogeneous systems)• Rhodes (iPhone/iPad dev)• Chingu – Game Engine
  42. 42. Преимущества Ruby“Простой очень. В 2 раза меньше программистов надо,ПО недорогое” - Евгения Казина (руководитель туристического стартапа)“В целом язык обладает мощным синтаксисом блоков икрасотой строк” - Silentip, Google Q&A
  43. 43. Зачем мне еще один язык программирования?
  44. 44. Benefits• Win/Lin/OSX• Бесплатное использование• Удобный синтаксис• Быстрая разработка• Хостинг дешевле, чем на .Net• Автоматизация рутинных действий
  45. 45. Полезные ссылки• http://ru.wikibooks.org/wiki/Ruby• http://russian.railstutorial.org/chapters/begin ning• IronRuby Unleashed (2010)• Крис Пайн – “Учись программировать!”
  46. 46. КонтактыTwitter: @SergeAlmazovSkype: a-staffordshireEmail: serge.almazov@gmail.comSite: developerzone.ru

×