SlideShare a Scribd company logo
Ruby
Сергей Зиновьев, Sr. Ruby developer
Игорь Ходырев, Sr. Ruby developer
Зачем Ruby?
Простые и понятные программы
Простой и понятный синтаксис
Малое время разработки
Сергей Зиновьев и Игорь Ходырев - Ruby
Сергей Зиновьев и Игорь Ходырев - Ruby
Историческая справка
1993 — начало разработки (Юкихиро
Мацумото a.k.a. Matz)
Название навеяно языком Perl
Цель разработки — «настоящий ОО» язык
программирования
1995 — первая версия в Японии
1997 — первая документация in English
2004 — появление Ruby on Rails
Место Ruby (Tiobe index)
Ruby — интерпретируемый
>javac MyProgram.java

>java MyProgram
>ruby my_program.rb
Ruby — динамический
def len(list)
x = 0
list.each { |_element| x += 1 }
end
public static int len(List list)
{
int x = 0;
Iterator listIterator =
list.iterator();
while(listIterator.hasNext()) {
x += 1;
}
}
Ruby — компактный
class Circle
attr_accessor :center, :radius
end
class Circle {
private Coordinate center, float radius;
public void setCenter(Coordinate center){
this.center = center;
}
public Coordinate getCenter(){
return center;
}
public void setRadius(float radius){
this.radius = radius;
}
public Coordinate getRadius(){
return radius;
}
}
Ruby — гибкий
HashMap<String, Integer> tripleLengths =
new HashMap<String, Integer>();
tripleLengths.put("Vasya", 15);
tripleLengths.put("Alex", 12);
tripleLengths.put("Anastasia", 27);
HashMap<String, Integer> tripleLengths =
new HashMap<String, Integer>();
List<String> names = Arrays.asList("Vasya",
"Alex", "Anastasia");
names.stream().forEach((name) -> {
tripleLengths.put(name, name.length()*3);
});
}
triple_lengths = {
"Vasya": 15,
"Alex": 12,
"Anastasia": 27
}
triple_lengths = Hash[
%w(Vasya Alex Anastasia).map do |name|
[name, name.length*3]
end
]
Гибкий, вплоть до выноса мозга
Внезапно…
[1] pry(main)> class Fixnum
[1] pry(main)* def +(i)
[1] pry(main)* self - i
[1] pry(main)* end
[1] pry(main)* end
[1] pry(main)> 1 + 1
=> 0
Ruby-окружение
RVM (https://rvm.io/)
RBenv (http://rbenv.org/)
системный пакет (Linux, Mac OS)
RubyInstaller for Windows — =/
Средства виртуализации
VMWare
VirtualBox
Parallels
Установка и настройка Ruby на Xubuntu 14.04
$ sudo apt-get update
$ sudo apt-get install git-core curl
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
$ curl -L https://get.rvm.io | bash -s stable --ruby
$ rvm use 2.2.2 --default
RVM
$ sudo apt-get update
$ sudo apt-get install git-core ruby-build
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ rbenv install 2.2.2
RBenv
Ruby — интерпретируемый
• ruby filename.rb
• irb — Interactive Ruby
• pry — irb на стероидах
Всё — объекты
Naming conventions
• переменные и методы — some_name
• классы — SomeClassName
• константы — I_AM_THE_CONSTANT
• присваивание
• составное присваивание
• возведение в степень
• равно
• не равно
Математические операции и присваивание
> a = 1
=> 1
> a += 2
=> 3
> b = a**2
=> 9
> b == a
=> false
> b != a
=> true
Условный оператор
if a > b
puts "Greater"
end
if num.odd?
puts "Нечётное"
else
puts "Чётное"
end
str = num.odd? ? 'Odd' : 'Even'
Условный оператор
unless you_lose do
puts 'Grab your prize here'
end
you_win = false
puts 'You win!' if you_win
you_lose = !you_win
puts 'You win!' unless you_lose
Массивы
>a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]
=> [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]
>a[2]
=> 3.14
>a.flatten.uniq
=> [1, 'hi', 3.14, 2, 4, 5]
>a.index(6)
=> nil
>a.flatten!
=> [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]
>a.index(4)
=> 5
Хэши
> h = { asd: "qwe", zxc: "ftw" }
=> {:asd=> "qwe", :zxc=> "ftw"}
> h[:asd]
=> "qwe"
> h[:zzz]
=> nil
Enumerable
for i in 1..5
p i
end
(1..5).each { |i| p i }
Output:
1
2
3
4
5
=> nil
Enumerable
[1,2,3].map { |n| n**3 }
=> [1, 8, 27]
a = (1..5).reject { |i| i.even? }
=> [1, 3, 5]
a.reduce { |i, mult| i * mult }
=> 15
Классы, методы
class Person < Mammal
@@amount = 0
ADULT_AGE = 18
def initialize(name, age)
@name, @age = name, age
@@amount += 1
end
def adult?
@age >= ADULT_AGE
end
end
Литература
и ссылки
Programming Ruby 1.9 & 2.0
http://tryruby.org
Ruby Programming Language (O'Reilly)
https://github.com/bbatsov/ruby-style-guide
http://rubykoans.com
http://rubyweekly.com
Домашнее задание
1.http://tryruby.org
2.В одном массиве записан рост некоторых
студентов, а в другом (с тем же числом элементов)
- их фамилии в том же порядке, в котором указан
рост. Известно, что все студенты разного роста.
Напечатайте фамилию самого высокого студента.
3.Даны две строки. Определите, сколько начальных
символов первой строки совпадает с начальными
символами второй. Рассмотрите два случая: а)
известно, что строки разные; б) строки могут
совпасть.
Домашнее задание
https://goo.gl/yT8GPT
rubyvrn@gmail.com

More Related Content

PPTX
Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты.
PDF
Making of external DSL for Django ORM - Павел Петлинский, Rambler&Co
PDF
Groovy presentation.
PPTX
Николай Паламарчук "Functional Programming basics for PHP developers"
PDF
Haskell - huge presentation for DevDay about Haskell language
PPT
Logomir
PDF
Артем Яворский "@babel/core": "7.x"
PPTX
TAB records
Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты.
Making of external DSL for Django ORM - Павел Петлинский, Rambler&Co
Groovy presentation.
Николай Паламарчук "Functional Programming basics for PHP developers"
Haskell - huge presentation for DevDay about Haskell language
Logomir
Артем Яворский "@babel/core": "7.x"
TAB records

Viewers also liked (20)

PPTX
Uses and gratification theory
PPTX
Propiedad intelectual del soft ware
PPTX
นิทาน
PPTX
Testing in projects
PDF
Леонид Шевцов «Clojure в деле»
PPSX
Visiting unpleasent places
PPTX
Fruit and vegetables
PPTX
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
PPTX
Thriller powerpoint finished
PPTX
Thriller powerpoint finished
PPTX
IT talk SPb: Найдется все
PDF
Андрей Вересов - .NET Reflection
PPTX
Николай Хабаров — Эволюция IoT
PPTX
«Прототип за 60 секунд: о вайрфреймах и прототипах»
PPTX
Reader’s theater (1)
PPTX
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
ODP
photos
PPT
Powell on leadership
PDF
Fintech summit 2016 society one &amp; clearmatch
PPTX
Яна Пролис "Создаем Dream Team"
Uses and gratification theory
Propiedad intelectual del soft ware
นิทาน
Testing in projects
Леонид Шевцов «Clojure в деле»
Visiting unpleasent places
Fruit and vegetables
Дмитрий Паньков ( DataArt) "Business intelligence: перспективы для будущих сп...
Thriller powerpoint finished
Thriller powerpoint finished
IT talk SPb: Найдется все
Андрей Вересов - .NET Reflection
Николай Хабаров — Эволюция IoT
«Прототип за 60 секунд: о вайрфреймах и прототипах»
Reader’s theater (1)
Елизавета Скоморохова — Что такое Usability Expert Review и Usability testing.
photos
Powell on leadership
Fintech summit 2016 society one &amp; clearmatch
Яна Пролис "Создаем Dream Team"
Ad

Similar to Сергей Зиновьев и Игорь Ходырев - Ruby (20)

PPTX
Ruby - или зачем мне еще один язык программирования?
ODP
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
PDF
Present saint-per3-by-pavel-vlasov
PDF
Павел Павлов - Scala для профессионалов - Joker 2013
ODP
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
PDF
2013 09 21 языки программирования
PDF
Лекция 11. Тестирование.
PDF
Лекция #5. Введение в язык программирования Python 3
PPTX
Вещи в Java, о которых вы (возможно) не знали
PPTX
Мастер класс по алгоритмам. Часть 1
ODP
About Python
PDF
Pyton – пробуем функциональный стиль
PPTX
JavaScript: хороший тон клиентской разработки
PDF
Ruby exceptions
PPTX
Эффективный C++
PDF
Внешние языки DSL на funcparserlib
PDF
Groovy jug-moscow-part 1
PDF
Back to the future: Функциональное программирование вчера и сегодня
PDF
Вторая лекция по основам ruby для студентов itc73.ru
Ruby - или зачем мне еще один язык программирования?
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
Present saint-per3-by-pavel-vlasov
Павел Павлов - Scala для профессионалов - Joker 2013
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
2013 09 21 языки программирования
Лекция 11. Тестирование.
Лекция #5. Введение в язык программирования Python 3
Вещи в Java, о которых вы (возможно) не знали
Мастер класс по алгоритмам. Часть 1
About Python
Pyton – пробуем функциональный стиль
JavaScript: хороший тон клиентской разработки
Ruby exceptions
Эффективный C++
Внешние языки DSL на funcparserlib
Groovy jug-moscow-part 1
Back to the future: Функциональное программирование вчера и сегодня
Вторая лекция по основам ruby для студентов itc73.ru
Ad

More from DataArt (20)

PDF
DataArt Custom Software Engineering with a Human Approach
PDF
DataArt Healthcare & Life Sciences
PDF
DataArt Financial Services and Capital Markets
PDF
About DataArt HR Partners
PDF
Event management в IT
PDF
Digital Marketing from inside
PPTX
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
PDF
DevOps Workshop:Что бывает, когда DevOps приходит на проект
PDF
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
PDF
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
PDF
Communication in QA's life
PDF
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
PDF
Знакомьтесь, DevOps
PDF
DevOps in real life
PDF
Codeless: автоматизация тестирования
PDF
Selenoid
PDF
Selenide
PDF
A. Sirota "Building an Automation Solution based on Appium"
PDF
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
PPTX
IT talk: Как я перестал бояться и полюбил TestNG
DataArt Custom Software Engineering with a Human Approach
DataArt Healthcare & Life Sciences
DataArt Financial Services and Capital Markets
About DataArt HR Partners
Event management в IT
Digital Marketing from inside
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
DevOps Workshop:Что бывает, когда DevOps приходит на проект
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
Communication in QA's life
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Знакомьтесь, DevOps
DevOps in real life
Codeless: автоматизация тестирования
Selenoid
Selenide
A. Sirota "Building an Automation Solution based on Appium"
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
IT talk: Как я перестал бояться и полюбил TestNG

Сергей Зиновьев и Игорь Ходырев - Ruby

  • 1. Ruby Сергей Зиновьев, Sr. Ruby developer Игорь Ходырев, Sr. Ruby developer
  • 2. Зачем Ruby? Простые и понятные программы Простой и понятный синтаксис Малое время разработки
  • 5. Историческая справка 1993 — начало разработки (Юкихиро Мацумото a.k.a. Matz) Название навеяно языком Perl Цель разработки — «настоящий ОО» язык программирования 1995 — первая версия в Японии 1997 — первая документация in English 2004 — появление Ruby on Rails
  • 7. Ruby — интерпретируемый >javac MyProgram.java
 >java MyProgram >ruby my_program.rb
  • 8. Ruby — динамический def len(list) x = 0 list.each { |_element| x += 1 } end public static int len(List list) { int x = 0; Iterator listIterator = list.iterator(); while(listIterator.hasNext()) { x += 1; } }
  • 9. Ruby — компактный class Circle attr_accessor :center, :radius end class Circle { private Coordinate center, float radius; public void setCenter(Coordinate center){ this.center = center; } public Coordinate getCenter(){ return center; } public void setRadius(float radius){ this.radius = radius; } public Coordinate getRadius(){ return radius; } }
  • 10. Ruby — гибкий HashMap<String, Integer> tripleLengths = new HashMap<String, Integer>(); tripleLengths.put("Vasya", 15); tripleLengths.put("Alex", 12); tripleLengths.put("Anastasia", 27); HashMap<String, Integer> tripleLengths = new HashMap<String, Integer>(); List<String> names = Arrays.asList("Vasya", "Alex", "Anastasia"); names.stream().forEach((name) -> { tripleLengths.put(name, name.length()*3); }); } triple_lengths = { "Vasya": 15, "Alex": 12, "Anastasia": 27 } triple_lengths = Hash[ %w(Vasya Alex Anastasia).map do |name| [name, name.length*3] end ]
  • 11. Гибкий, вплоть до выноса мозга Внезапно… [1] pry(main)> class Fixnum [1] pry(main)* def +(i) [1] pry(main)* self - i [1] pry(main)* end [1] pry(main)* end [1] pry(main)> 1 + 1 => 0
  • 14. Установка и настройка Ruby на Xubuntu 14.04 $ sudo apt-get update $ sudo apt-get install git-core curl $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 $ curl -L https://get.rvm.io | bash -s stable --ruby $ rvm use 2.2.2 --default RVM $ sudo apt-get update $ sudo apt-get install git-core ruby-build $ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ rbenv install 2.2.2 RBenv
  • 15. Ruby — интерпретируемый • ruby filename.rb • irb — Interactive Ruby • pry — irb на стероидах
  • 17. Naming conventions • переменные и методы — some_name • классы — SomeClassName • константы — I_AM_THE_CONSTANT
  • 18. • присваивание • составное присваивание • возведение в степень • равно • не равно Математические операции и присваивание > a = 1 => 1 > a += 2 => 3 > b = a**2 => 9 > b == a => false > b != a => true
  • 19. Условный оператор if a > b puts "Greater" end if num.odd? puts "Нечётное" else puts "Чётное" end str = num.odd? ? 'Odd' : 'Even'
  • 20. Условный оператор unless you_lose do puts 'Grab your prize here' end you_win = false puts 'You win!' if you_win you_lose = !you_win puts 'You win!' unless you_lose
  • 21. Массивы >a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3] => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]] >a[2] => 3.14 >a.flatten.uniq => [1, 'hi', 3.14, 2, 4, 5] >a.index(6) => nil >a.flatten! => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5] >a.index(4) => 5
  • 22. Хэши > h = { asd: "qwe", zxc: "ftw" } => {:asd=> "qwe", :zxc=> "ftw"} > h[:asd] => "qwe" > h[:zzz] => nil
  • 23. Enumerable for i in 1..5 p i end (1..5).each { |i| p i } Output: 1 2 3 4 5 => nil
  • 24. Enumerable [1,2,3].map { |n| n**3 } => [1, 8, 27] a = (1..5).reject { |i| i.even? } => [1, 3, 5] a.reduce { |i, mult| i * mult } => 15
  • 25. Классы, методы class Person < Mammal @@amount = 0 ADULT_AGE = 18 def initialize(name, age) @name, @age = name, age @@amount += 1 end def adult? @age >= ADULT_AGE end end
  • 26. Литература и ссылки Programming Ruby 1.9 & 2.0 http://tryruby.org Ruby Programming Language (O'Reilly) https://github.com/bbatsov/ruby-style-guide http://rubykoans.com http://rubyweekly.com
  • 27. Домашнее задание 1.http://tryruby.org 2.В одном массиве записан рост некоторых студентов, а в другом (с тем же числом элементов) - их фамилии в том же порядке, в котором указан рост. Известно, что все студенты разного роста. Напечатайте фамилию самого высокого студента. 3.Даны две строки. Определите, сколько начальных символов первой строки совпадает с начальными символами второй. Рассмотрите два случая: а) известно, что строки разные; б) строки могут совпасть.