Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo

1

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



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



          Тула - 2012

2

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

3

Ruby



Al2O3

4

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

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"

6

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

7

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

8

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

9

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

10

Установка

11

Если в системе уже есть Ruby
(OSX/Lin) - Terminal
$ ruby -v

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

12

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

• Простой Setup

13

OSX
1.   Установить Xcode
2.   Установить GCC
3.   $ curl -L get.rvm.io | bash -s stable
4.   http://russian.railstutorial.org

14

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

15

Поехали!

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

19

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

“Serge”.lenght
=> 5

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

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 конвертит в массивы

25

Массивы
> [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]

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
•   Блокнот... =)

30

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

31

Rails – это:
Кроссплатформенный
Открытый под лицензией MIT
Framework для web-приложений
Построен по принципу MVC

32

+

33

Как это работает?
Dynamic Language Runtime (DLR)
DLR основан на CLR
Обеспечивает языковые сервисы для
динамических языков:
• Динамическая система типов для всех языков,
  которые используют сервисы DLR
• Hosting API
• Dynamic code generation
• Dynamic method dispatch

34

Установка

35

http://www.ironruby.net/

36

Visual Studio

37

Примеры

38

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

39

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

40

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

41

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

42

IronRuby
require 'D:MySuperLibrary.dll'

myclass= MySuperLibrary::MySuperClass.new
print myclass.MySuperFunction

43

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

44

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

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

47

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

48

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

49

Полезные ссылки
• http://ru.wikibooks.org/wiki/Ruby
• http://russian.railstutorial.org/chapters/begin
  ning
• IronRuby Unleashed (2010)
• Крис Пайн – “Учись программировать!”

50

Контакты
Twitter: @SergeAlmazov
Skype: a-staffordshire
Email: serge.almazov@gmail.com
Site: developerzone.ru

More Related Content

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