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

50
Ruby или зачем мне еще один язык программирования? Сергей Алмазов Тула - 2012

Upload: pavel-tsukanov

Post on 02-Jun-2015

4.711 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

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

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

Сергей Алмазов

Тула - 2012

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

Ruby

Al2O

3

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

Сегодня будет 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 - или зачем мне еще один язык программирования?

Не такой страшный, как вы думаете

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

История

Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы.Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать.

Юкихиро Мацумото

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

Создатель языка Ruby

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

Ruby

• Скриптовый• Динамический• Объектно-Ориентированный• Рефлективный• Интерпретируемый• Высокоуровневый

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

Установка

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

Если в системе уже есть Ruby

(OSX/Lin) - Terminal$ ruby -v

(Win) - CMD> ruby -vruby 1.9.3p125 (2012-02-16) [i386-mingw32]

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

Win• http://railsinstaller.org/• Большая зеленая кнопка “Download the KIT”

• Простой Setup

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

OSX

1. Установить Xcode2. Установить GCC3. $ curl -L get.rvm.io | bash -s stable4. http://russian.railstutorial.org

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

Lin (Ubuntu)

Установка через RVM:$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

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

Поехали!

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

Ruby – объектно-ориентированный

Все есть объект Числа, блоки кода, вообще все!

3.Times doputs “Hello ” + “tula”.capitalize

end

Будет выведено:Hello TulaHello TulaHello Tule

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

Все есть объект!full = “serge almazov”names = full.split

until names.empty?names.first.capitalize!puts names.shift

end

Вывод:SergeAlmazov

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

Простой, гибкий синтаксис

Простые определения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 - или зачем мне еще один язык программирования?

Основы Ruby

Вызов метода:“Serge”.reverse=> “egreS”

“Serge”.lenght=> 5

reverse и length – это методы

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

Создание методаstr = "Serge"

def str.MyFunc name puts "Hello, "+nameend

puts str.MyFunc str

=> Hello, Serge

name – параметр метода MyFunc - имя метода

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

Создание методаstr = "Serge"

def str.MyFunc name = “Tom” puts "Hello, " + nameend

puts str.MyFunc

=> Hello, Tom

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

Можно и так

str = "Serge"

def str.MyFunc(name = "Tom")     puts "Hello, "+name

end

puts str.MyFunc

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

Работа со строками

> 40.reverse=>#<NoMethodError: undefined method `reverse' for 40:Fixnum>

> 40.to_s.reverseÞ "04“

Так лучше!to_s приводит к типу “string”

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

Приведение к типу

• to_s конвертит в строки• to_i конвертит в числа• to_a конвертит в массивы

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

Массивы

> [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 - или зачем мне еще один язык программирования?

Классы

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 - или зачем мне еще один язык программирования?

Если не нравятся классы

Можно про них забыть

Просто пишем в процедурном стиле

def factorial (n) (2..n).inject do |p, v|         p*v     end end

puts factorial(4)

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

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 - или зачем мне еще один язык программирования?

IDE

• JetBrains RubyMine• Aptana• Eclipse + RDT• IntelliJ IDEA + Ruby plugin• Visual Studio• Xcode 3.1• Блокнот... =)

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

Rails – это:

КроссплатформенныйОткрытый под лицензией MITFramework для web-приложенийПостроен по принципу MVC

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

+

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

Как это работает?

Dynamic Language Runtime (DLR)DLR основан на CLRОбеспечивает языковые сервисы для динамических языков:• Динамическая система типов для всех языков,

которые используют сервисы DLR• Hosting API• Dynamic code generation• Dynamic method dispatch

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

Установка

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

http://www.ironruby.net/

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

Visual Studio

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

Примеры

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

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 - или зачем мне еще один язык программирования?

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 - или зачем мне еще один язык программирования?

Использование DLL в IronRuby

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

C# Library

namespace MySuperLibrary{ public class MySuperClass { public string MySuperFunction() { return "This is super function! =)\n"; } }}

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

IronRuby

require 'D:\MySuperLibrary.dll'

myclass= MySuperLibrary::MySuperClass.newprint myclass.MySuperFunction

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

Кто использует Ruby?

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

Для энтузиастов

• 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 - или зачем мне еще один язык программирования?

Преимущества Ruby

“Простой очень. В 2 раза меньше программистов надо, ПО недорогое”

- Евгения Казина (руководитель туристического стартапа)

“В целом язык обладает мощным синтаксисом блоков и красотой строк”

- Silentip, Google Q&A

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

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

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

Benefits

• Win/Lin/OSX• Бесплатное использование• Удобный синтаксис• Быстрая разработка• Хостинг дешевле, чем на .Net• Автоматизация рутинных действий

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

Полезные ссылки

• http://ru.wikibooks.org/wiki/Ruby• http://

russian.railstutorial.org/chapters/beginning• IronRuby Unleashed (2010)• Крис Пайн – “Учись программировать!”

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

Контакты

Twitter: @SergeAlmazovSkype: a-staffordshireEmail: [email protected]: developerzone.ru