28
Ruby Сергей Зиновьев, Sr. Ruby developer Игорь Ходырев, Sr. Ruby developer

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

  • Upload
    dataart

  • View
    120

  • Download
    0

Embed Size (px)

Citation preview

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

Ruby

Сергей Зиновьев, Sr. Ruby developer Игорь Ходырев, Sr. Ruby developer

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

Зачем Ruby?

Простые и понятные программы

Простой и понятный синтаксис

Малое время разработки

Page 3: Сергей Зиновьев и Игорь Ходырев - Ruby
Page 4: Сергей Зиновьев и Игорь Ходырев - Ruby
Page 5: Сергей Зиновьев и Игорь Ходырев - Ruby

Историческая справка

1993 — начало разработки (Юкихиро Мацумото a.k.a. Matz)

Название навеяно языком Perl

Цель разработки — «настоящий ОО» язык программирования

1995 — первая версия в Японии

1997 — первая документация in English

2004 — появление Ruby on Rails

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

Место Ruby (Tiobe index)

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

Ruby — интерпретируемый

>javac MyProgram.java >java MyProgram

>ruby my_program.rb

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

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; }}

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

Ruby — компактный

class Circle attr_accessor :center, :radiusend

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; }}

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

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]

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

Гибкий, вплоть до выноса мозга

Внезапно…

[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

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

Ruby-окружение

RVM (https://rvm.io/)

RBenv (http://rbenv.org/)

системный пакет (Linux, Mac OS)

RubyInstaller for Windows — =/

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

Средства виртуализации

VMWare

VirtualBox

Parallels

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

Установка и настройка 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

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

Ruby — интерпретируемый

• ruby filename.rb

• irb — Interactive Ruby

• pry — irb на стероидах

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

Всё — объекты

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

Naming conventions

• переменные и методы — some_name

• классы — SomeClassName

• константы — I_AM_THE_CONSTANT

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

• присваивание • составное присваивание • возведение в степень • равно • не равно

Математические операции и присваивание

> a = 1=> 1> a += 2=> 3> b = a**2=> 9> b == a=> false> b != a=> true

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

Условный оператор

if a > b puts "Greater"end

if num.odd? puts "Нечётное"else puts "Чётное"end

str = num.odd? ? 'Odd' : 'Even'

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

Условный оператор

unless you_lose do puts 'Grab your prize here'end

you_win = falseputs 'You win!' if you_win

you_lose = !you_winputs 'You win!' unless you_lose

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

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

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

Хэши

> h = { asd: "qwe", zxc: "ftw" }=> {:asd=> "qwe", :zxc=> "ftw"}

> h[:asd] => "qwe"

> h[:zzz] => nil

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

Enumerable

for i in 1..5 p iend

(1..5).each { |i| p i }

Output:

12345=> nil

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

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

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

Классы, методы

class Person < Mammal @@amount = 0 ADULT_AGE = 18 def initialize(name, age) @name, @age = name, age @@amount += 1 end

def adult? @age >= ADULT_AGE endend

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

Литература и ссылки

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

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

Домашнее задание

1.http://tryruby.org 2.В одном массиве записан рост некоторых студентов, а в другом (с тем же числом элементов) - их фамилии в том же порядке, в котором указан рост. Известно, что все студенты разного роста. Напечатайте фамилию самого высокого студента.

3.Даны две строки. Определите, сколько начальных символов первой строки совпадает с начальными символами второй. Рассмотрите два случая: а) известно, что строки разные; б) строки могут совпасть.

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

Домашнее задание

https://goo.gl/yT8GPT [email protected]