27
Введение в Ruby, gem’ы и другие бриллианты Докладчик: Игорь Ходырев Дата: 12 июля 2016 года

Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

  • Upload
    dataart

  • View
    107

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Введение в Ruby, gem’ы и другие бриллианты

Докладчик: Игорь ХодыревДата: 12 июля 2016 года

Page 2: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Почему Ruby?

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

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

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

Page 3: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты
Page 4: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты
Page 5: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

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

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

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

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

Page 6: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Место Ruby (Tiobe index)

Page 7: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

> javac MyProgram.java> java MyProgram

> ruby my_program.rb

Page 8: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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, gem’ы и другие бриллианты

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, gem’ы и другие бриллианты

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, gem’ы и другие бриллианты

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

[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, gem’ы и другие бриллианты

Ruby-окружение

• RVM (https://rvm.io/)

• RBenv (http://rbenv.org/)

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

• RubyInstaller for Windows — =/

Page 13: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

• VMWare

• VirtualBox

• Parallels

Page 14: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

• ruby filename.rb

• irb — Interactive Ruby

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

Page 15: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Всё — объекты

Page 16: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Naming conventions

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

• классы — SomeClassName

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

Page 17: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

• присваивание

• составное присваивание

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

• равно

• не равно

• шайтан-оператор поиск подстроки

> a = 1=> 1> a += 2=> 3> b = a ** 2=> 9> b == a=> false> b != a=> true> "qwe" =~ /we/=> 1

Page 18: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

if a > b puts "Greater"end

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

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

Page 19: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

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 20: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Массивы

> 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 21: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Хэши

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

> h[:asd] => "qwe" > h[:zzz] => nil

Page 22: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

Enumerable

for i in 1..5 p iend

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

Output:

12345=> nil

Page 23: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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 24: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

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 25: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

• 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 26: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

• http://tryruby.org

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

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

Page 27: Игорь Ходырев — Введение в Ruby, gem’ы и другие бриллианты

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

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