Игорь Ходырев — Введение в ruby, gem’ы и другие...
Post on 19-Feb-2017
107 Views
Preview:
TRANSCRIPT
Введение в Ruby, gem’ы и другие бриллианты
Докладчик: Игорь ХодыревДата: 12 июля 2016 года
Почему Ruby?
• Простые и понятные программы
• Простой и понятный синтаксис
• Малое время разработки
Историческая справка
• 1993 — начало разработки (Юкихиро Мацумото aka Matz)
• 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, :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; }}
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 — интерпретируемый
• 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> "qwe" =~ /we/=> 1
Условный оператор
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 = falseputs 'You win!' if you_win
you_lose = !you_winputs '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 iend
(1..5).each { |i| p i }
Output:
12345=> 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 endend
Литература и ссылки
• 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
Домашнее задание
• http://tryruby.org
• В одном массиве записан рост некоторых студентов, а в другом (с тем же числом элементов) - их фамилии в том же порядке, в котором указан рост. Известно, что все студенты разного роста. Напечатайте фамилию самого высокого студента.
• Даны две строки. Определите, сколько начальных символов первой строки совпадает с начальными символами второй. Рассмотрите два случая: а) известно, что строки разные; б) строки могут совпасть.
top related