Сергей Зиновьев и Игорь Ходырев - Ruby
-
Upload
dataart -
Category
Technology
-
view
120 -
download
0
Transcript of Сергей Зиновьев и Игорь Ходырев - Ruby
Ruby
Сергей Зиновьев, Sr. Ruby developer Игорь Ходырев, Sr. Ruby developer
Зачем 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, :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 на 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 = 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
Домашнее задание
1.http://tryruby.org 2.В одном массиве записан рост некоторых студентов, а в другом (с тем же числом элементов) - их фамилии в том же порядке, в котором указан рост. Известно, что все студенты разного роста. Напечатайте фамилию самого высокого студента.
3.Даны две строки. Определите, сколько начальных символов первой строки совпадает с начальными символами второй. Рассмотрите два случая: а) известно, что строки разные; б) строки могут совпасть.
Домашнее задание
https://goo.gl/yT8GPT [email protected]