SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
#3 Обзор Ruby
Обзор языка
и начало работы над своим приложением
Денис Калесников, главный программист Мэйк
make.st
Особенности Ruby
Интерпретируемый язык с динамической типизацией. Это значит, что для
вызова методов не обязательно задавать типы атрибутов. Все
переменные в общем равноправны. Вы сами определяете, с чем вы
работаете.
Не имеет точки входа.
Не требует компиляции, т.е. выполняется в момент запроса. Но в
следствии этого работает несколько медленнее.
Позволяет писать лаконичные выражения, за счет богатой встроенной
библиотеки.
Переменные в Ruby
Локальная переменная: variable_name
Переменная экземпляра класса: @variable_name
Переменная класса: @@variable_name.
Глобальная переменная: $VARIABLE_NAME.
Важно! Не рекомендуется использовать глобальные переменные, потому
что они могут быть изменены в любой точке программы.
Основные типы данных
String - строковый: “строка”
Integer - целые числа: 4
Float - числа с плавающей запятой: 4.5
Symbol - символ: :symbol
Классы, модули и методы
Определение класса начинается с ключевого слова class и названия самого
класса, которое пишется CamelCase’ом
Модули задаются как классы, только слово module используется вместо
class. В отличие от классов создать объекты на основе модуля нельзя,
модуль не может иметь подклассы, нет иерархии и наследования.
Классы и модули содержат в себе методы, которые объявляются
конструкцией def method_name … end и бывают нескольких типов: public,
private, protected
Наследование и примеси (mixins)
Наследование позволяет разным классам соотноситься друг с другом и
группироваться по схожим частям в структуре.
Примеси (mixins) - возможность модулей делить функциональность между
классами. При включении (include) модуля в класс, его методы также
добавляются в класс.
Методы в Ruby
Несколько фактов о методах:
Названия пишутся в стиле camel_case
Могут быть определены в любом
контексте.
Могут оканчиваться на ? или на !
Последнее выражение является
возвращаемым значением.
Пример:
def method_name(arg1, arg2=1, params={})
arg1 + arg2 + params[:a]
end
Управляющие конструкции
Классический вариант:
if a<b
…
elsif a==b
...
else
...
end
Одностроковый (inline) вариант:
puts a if a > b
a > b ? puts a : puts b
Управляющие конструкции
unless является управляющей конструкцией, обратной конструкции if.
unless
…
end
Важно! Использовать в данной конструкции else не рекомендуется, так как
блоки становятся тяжелыми для восприятия.
Управляющие конструкции
case a
…
when a < 5
…
when a == 5
…
else
…
end
Операторы
Операторы языка достаточно стандартны. Большинство операторов руби по
факту являются вызовами соответствующих методов. Например a + b
интерпретируется как a. + (b), где метод “+” вызывается на объект, на
который ссылается переменная a с аргументом b.
Наиболее удобную таблицу прецедентности операторов для языка Ruby
можно найти здесь:
www.tutorialspoint.com/ruby/ruby_operators.htm
Обработка исключений
Чтобы избежать ошибок в работе приложения, часто используют обработчик
исключений. Для этого используют блок:
begin
rescue Exception => e
…
ensure
end
Если появляется исключение, то контроль передается блоку rescue и
исполняется код внутри этого блока. Код внутри ensure исполняется всегда
Массивы
Массив создаётся как минимум тремя способами.
1. [1, 2, 3, 4]
2. Array.new(6){ |index| index + 1 }
3. (1..6).to_a
Массивы. Действия с массивами
Размер массива можно получить с помощью метода size:
[1, 3, ‘ruby’, 16].size #=> 4
Сортировка выполняется с помощью методов sort или sort_by:
[1, 5, 3, 2, 16].sort #=> [1, 2, 3, 5, 16]
["собака", "была", "у", "артемия"].sort_by{ |elem| elem.size }
#=>["у", "была", "собака", "артемия"]
Массивы. Действия с массивами
Для того, чтобы обратить массив, достаточно использовать метод reverse:
[1, 2, 3, 4, 5].reverse #=>[5, 4, 3, 2, 1]
Группировка массивов производится с помощью метода group_by:
%w(машина волк заяц сова шрек кот ток бит).group_by{|el| el.size }
#=> {6=>["машина"], 4=>["волк", "заяц", "сова", "шрек"], 3=>["кот", "ток", "бит"]}
Массивы. Действия с массивами
Для удаления элемента из массива существует метод delete. Особенностью
этого метода является то, что он возвращает удаленное значение.
Пример:
array = [1, 5, 3, 2, 16, 2] #=> [1, 5, 3, 2, 16, 2]
a = 2 #=> 2
array.delete(a) #=> 2
array #=> [1, 5, 3, 16]
Если вам необходимо очистить массив от nil элементов, используйте метод
compact
Хэши
Хэш (hash) - коллекция пар ключ-значение. Хэш подобен массиву, за
исключением того, что индексация осуществляется через ключи (объекты
любого типа), а не через целочисленные индексы.
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash[:a => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
{ "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200}
Hash[a: 100, b: 200] #=> {:a=>100, :b=>200}
{String => 'string', Integer => 'int', a: 12}
Хэши
Метод delete(key) удаляет пару ключ-значение из хеш, которая соответствует
ключу key.
Возвращается значение, соответствующее ключу. Если ключ не был найден,
тогда возвращается "значение по-умолчанию". Если используется
конструкция с блоком и ключ не был найден, то возвращается результат
выполнения блока block, которому передается ключ key
h = { "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200}
h.delete("a") #=> 100
h.delete("z") #=> nil
h.delete("z") { |el| "#{el} не найден" } #=> "z не найден"
Хэши
HashWithIndifferentAccess
Позволяет получать значения по ключу независимо от того какой типа его
ключ - String или Symbol (символ)
Удобно использовать когда названия ключей заданы в коде символом, а хэш
приходит из запроса или текстового файла.
Важно! Не входит в стандартную библиотеку и предоставляется
фреймворком Rails
Блоки
Блок — это произвольный код, который можно передать любому методу в
качестве неявного последнего аргумента. Следует понимать, что при этом
блок является особой конструкцией языка и обособлен от списка явных
аргументов метода, что означает следующее:
методу можно передать только один блок;
он всегда идет в самом конце и вынесен за скобки с аргументами (если
они есть);
его можно задать при вызове любого метода, независимо от того, указаны
в определении метода аргументы или нет.
Блоки. Замыкание контекста
Блок имеет доступ к переменным и контексту где вызывается метод, в
который передается этот блок.
Это похоже на замыкание - прием в программировании, когда функция
захватывает переменные контекста, в котором она определена.
Циклы
Классические циклы for …; while …; until …; в rails-приложениях почти не
используются. Синтаксис у них стандартный.
Так же есть циклы do … while; do … until:
begin
...
end while …
Прервать цикл - вызов break
На следующую итерацию - next
Циклы. Часто используемые конструкции
Чтобы создать обычный цикл, исполняющийся n раз в Ruby, достаточно
использовать следующую конструкцию:
n.times do
…
end
times в Ruby заменяет код вида for(i=0;i<n;i++), но это не означает, что цикл
for отсутствует в Ruby.
Циклы. Часто используемые конструкции
Для того чтобы разобрать массив или коллекцию по элементам существует 2
метода - each и each_with_index. Метод each_with_index используется, когда
необходимо хранить индекс текущего цикла.
Пример:
collection.each do |collection_item|
...
end
collection.all.each_with_index do |collection_item, index|
...
end
Циклы. Часто используемые конструкции
В отличии от метода each, метод map возвращает массив элементов.
array.map {|item| block }
Выполняет выражение block для каждого элемента массива array. Создает и
возвращает новый массив, состоящий из значений, которые получены при
вычислении выражения block. Исходный массив при этом не изменяется
Циклы. Часто используемые конструкции
Метод reduce позволяет свести коллекцию значений в одно. Для каждого
значения в коллекции вызывается функция, первый аргумент которой
результат предыдущего вычисления, второй - текущий элемент коллекции.
Важно! Метод обрабатывает коллекцию слева-направо.
Конкатенация строк. Интерполяция
Строка создаётся при помощи ограничительных символов. Для этих целей
чаще всего используются " (программистская кавычка) и ' (машинописный
апостроф). Их смысл различен:
Строка в апострофах гарантирует, что в ней будет содержаться тот же
текст, что и в коде программы, без изменений.
Строка в кавычках будет проходить предварительное преобразование.
Будут раскрыты конструкции «вставка» и «специальный символ».
Вставка — это конструкция, которая вставляется между ограничительными
символами внутри строки. Например: "Hello, #{User.name}!"
Конкатенация строк. Безопасный вывод HTML
При использовании шаблонизатора erb, у вас появится возможность
выводить данные из Ruby на страницу.
Для того, чтобы безопасно вывести данные, необходимо использовать
конструкцию <%= content %>. Она выведет все данные как текст.
По умолчанию код HTML преобразуется в текст и пользователь видит
непосредственно HTML-код. Это связано с защитой от XSS-атак.
Если вы уверены в авторе HTML-содержимого и хотите, чтобы браузер
интерпретировал как HTML, вы можете использовать
<%= content.html_safe %> либо <%== content %>
Литература
https://habrahabr.ru/hub/ruby/
https://github.com/bbatsov/ruby-style-guide
https://github.com/bbatsov/rails-style-guide
http://rusrails.ru/
Спасибо за внимание!
Денис Калесников, главный программист Мэйк
make.st

Contenu connexe

Tendances

Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 

Tendances (20)

Spring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny BorisovSpring the Ripper by Evgeny Borisov
Spring the Ripper by Evgeny Borisov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПО
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Groovy
GroovyGroovy
Groovy
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
Увеличиваем мощь фреймворка Kdt & code`s generator
Увеличиваем мощь фреймворка   Kdt & code`s generatorУвеличиваем мощь фреймворка   Kdt & code`s generator
Увеличиваем мощь фреймворка Kdt & code`s generator
 

En vedette (13)

Sapa Kuwi Nakula, Watake, Keluwargane, lan Musuhe
Sapa Kuwi Nakula, Watake, Keluwargane, lan MusuheSapa Kuwi Nakula, Watake, Keluwargane, lan Musuhe
Sapa Kuwi Nakula, Watake, Keluwargane, lan Musuhe
 
N7
N7N7
N7
 
Say yes to your CXO - Switch to Avaya Networking
Say yes to your CXO - Switch to Avaya NetworkingSay yes to your CXO - Switch to Avaya Networking
Say yes to your CXO - Switch to Avaya Networking
 
2 martinez mena
2 martinez mena2 martinez mena
2 martinez mena
 
federal reserve
federal reservefederal reserve
federal reserve
 
TRABAJO DE INFORMÁTICA.
TRABAJO DE INFORMÁTICA.TRABAJO DE INFORMÁTICA.
TRABAJO DE INFORMÁTICA.
 
Gardening
GardeningGardening
Gardening
 
Protocolo del consumo de cerveza artesanal en san luís potosí
Protocolo del consumo de cerveza artesanal en san luís potosíProtocolo del consumo de cerveza artesanal en san luís potosí
Protocolo del consumo de cerveza artesanal en san luís potosí
 
Moodle1
Moodle1Moodle1
Moodle1
 
Presentazione risultati rilevazione bisogni docenti pnsd
Presentazione risultati rilevazione bisogni docenti pnsdPresentazione risultati rilevazione bisogni docenti pnsd
Presentazione risultati rilevazione bisogni docenti pnsd
 
Arquitectura bi para reportes comerciales
Arquitectura bi para reportes comercialesArquitectura bi para reportes comerciales
Arquitectura bi para reportes comerciales
 
Proyecto de vida
Proyecto de vida Proyecto de vida
Proyecto de vida
 
Latihan 3 TK-1B
Latihan 3 TK-1BLatihan 3 TK-1B
Latihan 3 TK-1B
 

Similaire à Обзор Ruby

Rupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev RubyRupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev Ruby
emarkine
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7
Technopark
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
Alexander Shcherbinin
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
solit
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
Technopark
 

Similaire à Обзор Ruby (20)

Текст.pptx
Текст.pptxТекст.pptx
Текст.pptx
 
Underscore js
Underscore jsUnderscore js
Underscore js
 
Rupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev RubyRupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev Ruby
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
Java. Методы
Java. Методы Java. Методы
Java. Методы
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
лек5 6
лек5 6лек5 6
лек5 6
 
C# Desktop. Занятие 05.
C# Desktop. Занятие 05.C# Desktop. Занятие 05.
C# Desktop. Занятие 05.
 
PHP7 - что ожидать?
PHP7 - что ожидать?PHP7 - что ожидать?
PHP7 - что ожидать?
 
Типы данных
Типы данныхТипы данных
Типы данных
 
Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
java 8
java 8java 8
java 8
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Java осень 2013 лекция 7
Java осень 2013 лекция 7Java осень 2013 лекция 7
Java осень 2013 лекция 7
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в Dart
 
Ecma script 6 in action
Ecma script 6 in actionEcma script 6 in action
Ecma script 6 in action
 
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 

Plus de Digital-агентство Мэйк

Контекстная реклама: от теории к практике
Контекстная реклама: от теории к практикеКонтекстная реклама: от теории к практике
Контекстная реклама: от теории к практике
Digital-агентство Мэйк
 

Plus de Digital-агентство Мэйк (15)

Системные коммуникации с пациентом
Системные коммуникации с пациентомСистемные коммуникации с пациентом
Системные коммуникации с пациентом
 
Как эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудниковКак эффективно развивать и удерживать нужных сотрудников
Как эффективно развивать и удерживать нужных сотрудников
 
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
Индивидуальный тюнинг и кастомизации своего продукта как новая стратегия раб...
 
12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов 12 эффективных инструментов для отрыва от конкурентов
12 эффективных инструментов для отрыва от конкурентов
 
4 шага к счастью клиента
4 шага к счастью клиента4 шага к счастью клиента
4 шага к счастью клиента
 
Современные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотиповСовременные тенденции против устаревших стереотипов
Современные тенденции против устаревших стереотипов
 
Продвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способовПродвижение в соцсетях: 13 эффективных способов
Продвижение в соцсетях: 13 эффективных способов
 
Угрозы безопасности в интернете
Угрозы безопасности в интернетеУгрозы безопасности в интернете
Угрозы безопасности в интернете
 
Crm системы: клиент в центре внимания
Crm системы: клиент в центре вниманияCrm системы: клиент в центре внимания
Crm системы: клиент в центре внимания
 
Ограничение доступа в ruby on rails
Ограничение доступа в ruby on railsОграничение доступа в ruby on rails
Ограничение доступа в ruby on rails
 
Ruby on Rails. Ajax-обработка html-форм
Ruby on Rails. Ajax-обработка html-формRuby on Rails. Ajax-обработка html-форм
Ruby on Rails. Ajax-обработка html-форм
 
Системный подход к привлечению клиентов
Системный подход к привлечению клиентовСистемный подход к привлечению клиентов
Системный подход к привлечению клиентов
 
Cоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединенийCоциальные сети для молодёжных объединений
Cоциальные сети для молодёжных объединений
 
Эффективный сайт медицинского учреждения
Эффективный сайт медицинского учрежденияЭффективный сайт медицинского учреждения
Эффективный сайт медицинского учреждения
 
Контекстная реклама: от теории к практике
Контекстная реклама: от теории к практикеКонтекстная реклама: от теории к практике
Контекстная реклама: от теории к практике
 

Обзор Ruby

  • 1. #3 Обзор Ruby Обзор языка и начало работы над своим приложением Денис Калесников, главный программист Мэйк make.st
  • 2. Особенности Ruby Интерпретируемый язык с динамической типизацией. Это значит, что для вызова методов не обязательно задавать типы атрибутов. Все переменные в общем равноправны. Вы сами определяете, с чем вы работаете. Не имеет точки входа. Не требует компиляции, т.е. выполняется в момент запроса. Но в следствии этого работает несколько медленнее. Позволяет писать лаконичные выражения, за счет богатой встроенной библиотеки.
  • 3. Переменные в Ruby Локальная переменная: variable_name Переменная экземпляра класса: @variable_name Переменная класса: @@variable_name. Глобальная переменная: $VARIABLE_NAME. Важно! Не рекомендуется использовать глобальные переменные, потому что они могут быть изменены в любой точке программы.
  • 4. Основные типы данных String - строковый: “строка” Integer - целые числа: 4 Float - числа с плавающей запятой: 4.5 Symbol - символ: :symbol
  • 5. Классы, модули и методы Определение класса начинается с ключевого слова class и названия самого класса, которое пишется CamelCase’ом Модули задаются как классы, только слово module используется вместо class. В отличие от классов создать объекты на основе модуля нельзя, модуль не может иметь подклассы, нет иерархии и наследования. Классы и модули содержат в себе методы, которые объявляются конструкцией def method_name … end и бывают нескольких типов: public, private, protected
  • 6. Наследование и примеси (mixins) Наследование позволяет разным классам соотноситься друг с другом и группироваться по схожим частям в структуре. Примеси (mixins) - возможность модулей делить функциональность между классами. При включении (include) модуля в класс, его методы также добавляются в класс.
  • 7. Методы в Ruby Несколько фактов о методах: Названия пишутся в стиле camel_case Могут быть определены в любом контексте. Могут оканчиваться на ? или на ! Последнее выражение является возвращаемым значением. Пример: def method_name(arg1, arg2=1, params={}) arg1 + arg2 + params[:a] end
  • 8. Управляющие конструкции Классический вариант: if a<b … elsif a==b ... else ... end Одностроковый (inline) вариант: puts a if a > b a > b ? puts a : puts b
  • 9. Управляющие конструкции unless является управляющей конструкцией, обратной конструкции if. unless … end Важно! Использовать в данной конструкции else не рекомендуется, так как блоки становятся тяжелыми для восприятия.
  • 10. Управляющие конструкции case a … when a < 5 … when a == 5 … else … end
  • 11. Операторы Операторы языка достаточно стандартны. Большинство операторов руби по факту являются вызовами соответствующих методов. Например a + b интерпретируется как a. + (b), где метод “+” вызывается на объект, на который ссылается переменная a с аргументом b. Наиболее удобную таблицу прецедентности операторов для языка Ruby можно найти здесь: www.tutorialspoint.com/ruby/ruby_operators.htm
  • 12. Обработка исключений Чтобы избежать ошибок в работе приложения, часто используют обработчик исключений. Для этого используют блок: begin rescue Exception => e … ensure end Если появляется исключение, то контроль передается блоку rescue и исполняется код внутри этого блока. Код внутри ensure исполняется всегда
  • 13. Массивы Массив создаётся как минимум тремя способами. 1. [1, 2, 3, 4] 2. Array.new(6){ |index| index + 1 } 3. (1..6).to_a
  • 14. Массивы. Действия с массивами Размер массива можно получить с помощью метода size: [1, 3, ‘ruby’, 16].size #=> 4 Сортировка выполняется с помощью методов sort или sort_by: [1, 5, 3, 2, 16].sort #=> [1, 2, 3, 5, 16] ["собака", "была", "у", "артемия"].sort_by{ |elem| elem.size } #=>["у", "была", "собака", "артемия"]
  • 15. Массивы. Действия с массивами Для того, чтобы обратить массив, достаточно использовать метод reverse: [1, 2, 3, 4, 5].reverse #=>[5, 4, 3, 2, 1] Группировка массивов производится с помощью метода group_by: %w(машина волк заяц сова шрек кот ток бит).group_by{|el| el.size } #=> {6=>["машина"], 4=>["волк", "заяц", "сова", "шрек"], 3=>["кот", "ток", "бит"]}
  • 16. Массивы. Действия с массивами Для удаления элемента из массива существует метод delete. Особенностью этого метода является то, что он возвращает удаленное значение. Пример: array = [1, 5, 3, 2, 16, 2] #=> [1, 5, 3, 2, 16, 2] a = 2 #=> 2 array.delete(a) #=> 2 array #=> [1, 5, 3, 16] Если вам необходимо очистить массив от nil элементов, используйте метод compact
  • 17. Хэши Хэш (hash) - коллекция пар ключ-значение. Хэш подобен массиву, за исключением того, что индексация осуществляется через ключи (объекты любого типа), а не через целочисленные индексы. Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200} Hash[:a => 100, "b" => 200] #=> {"a"=>100, "b"=>200} { "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200} Hash[a: 100, b: 200] #=> {:a=>100, :b=>200} {String => 'string', Integer => 'int', a: 12}
  • 18. Хэши Метод delete(key) удаляет пару ключ-значение из хеш, которая соответствует ключу key. Возвращается значение, соответствующее ключу. Если ключ не был найден, тогда возвращается "значение по-умолчанию". Если используется конструкция с блоком и ключ не был найден, то возвращается результат выполнения блока block, которому передается ключ key h = { "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200} h.delete("a") #=> 100 h.delete("z") #=> nil h.delete("z") { |el| "#{el} не найден" } #=> "z не найден"
  • 19. Хэши HashWithIndifferentAccess Позволяет получать значения по ключу независимо от того какой типа его ключ - String или Symbol (символ) Удобно использовать когда названия ключей заданы в коде символом, а хэш приходит из запроса или текстового файла. Важно! Не входит в стандартную библиотеку и предоставляется фреймворком Rails
  • 20. Блоки Блок — это произвольный код, который можно передать любому методу в качестве неявного последнего аргумента. Следует понимать, что при этом блок является особой конструкцией языка и обособлен от списка явных аргументов метода, что означает следующее: методу можно передать только один блок; он всегда идет в самом конце и вынесен за скобки с аргументами (если они есть); его можно задать при вызове любого метода, независимо от того, указаны в определении метода аргументы или нет.
  • 21. Блоки. Замыкание контекста Блок имеет доступ к переменным и контексту где вызывается метод, в который передается этот блок. Это похоже на замыкание - прием в программировании, когда функция захватывает переменные контекста, в котором она определена.
  • 22. Циклы Классические циклы for …; while …; until …; в rails-приложениях почти не используются. Синтаксис у них стандартный. Так же есть циклы do … while; do … until: begin ... end while … Прервать цикл - вызов break На следующую итерацию - next
  • 23. Циклы. Часто используемые конструкции Чтобы создать обычный цикл, исполняющийся n раз в Ruby, достаточно использовать следующую конструкцию: n.times do … end times в Ruby заменяет код вида for(i=0;i<n;i++), но это не означает, что цикл for отсутствует в Ruby.
  • 24. Циклы. Часто используемые конструкции Для того чтобы разобрать массив или коллекцию по элементам существует 2 метода - each и each_with_index. Метод each_with_index используется, когда необходимо хранить индекс текущего цикла. Пример: collection.each do |collection_item| ... end collection.all.each_with_index do |collection_item, index| ... end
  • 25. Циклы. Часто используемые конструкции В отличии от метода each, метод map возвращает массив элементов. array.map {|item| block } Выполняет выражение block для каждого элемента массива array. Создает и возвращает новый массив, состоящий из значений, которые получены при вычислении выражения block. Исходный массив при этом не изменяется
  • 26. Циклы. Часто используемые конструкции Метод reduce позволяет свести коллекцию значений в одно. Для каждого значения в коллекции вызывается функция, первый аргумент которой результат предыдущего вычисления, второй - текущий элемент коллекции. Важно! Метод обрабатывает коллекцию слева-направо.
  • 27. Конкатенация строк. Интерполяция Строка создаётся при помощи ограничительных символов. Для этих целей чаще всего используются " (программистская кавычка) и ' (машинописный апостроф). Их смысл различен: Строка в апострофах гарантирует, что в ней будет содержаться тот же текст, что и в коде программы, без изменений. Строка в кавычках будет проходить предварительное преобразование. Будут раскрыты конструкции «вставка» и «специальный символ». Вставка — это конструкция, которая вставляется между ограничительными символами внутри строки. Например: "Hello, #{User.name}!"
  • 28. Конкатенация строк. Безопасный вывод HTML При использовании шаблонизатора erb, у вас появится возможность выводить данные из Ruby на страницу. Для того, чтобы безопасно вывести данные, необходимо использовать конструкцию <%= content %>. Она выведет все данные как текст. По умолчанию код HTML преобразуется в текст и пользователь видит непосредственно HTML-код. Это связано с защитой от XSS-атак. Если вы уверены в авторе HTML-содержимого и хотите, чтобы браузер интерпретировал как HTML, вы можете использовать <%= content.html_safe %> либо <%== content %>
  • 30. Спасибо за внимание! Денис Калесников, главный программист Мэйк make.st