SlideShare une entreprise Scribd logo
1  sur  37
Введение в Ruby
    Михаил Вайсман
   HackDay Ярославль
Что такое Ruby?
Ruby это...
A dynamic, open source programming language with
a focus on simplicity and productivity. It has an
elegant syntax that is natural to read and easy to
write.

                          http://www.ruby-lang.org
историческая справка
• Ruby был создан Yukihiro “Matz”
  Matsumoto в 1993 г.
 • Более мощный, чем Perl и более OO,
    чем Python
• Наиболее используемая версия 1.8
• Текущая версия 1.9
особенности
•   Интерпретируемый     •   Чистый ОО язык

•   Динамическая         •   Любое выражение
    типизация                имет возвращаемое
                             значение
•   Оптимизирован для
    человека             •   Объектная модель
                             полностью открыта и
    •   Легко писать и       может быть изменена
                             разработчиком
        читать

    •   Мощный
IRB (interactive ruby)
IRB
• Прекрасный инструмент для:
 • Эксперементов и проверки идей
 • Изучения Ruby
 • Исследования внутреннего устройства
    Ruby и его библиотек
• Запускается из командной строки
~$   irb --simple-prompt
>>   2+2
=>   4
>>   5*5*5
=>   125
>>   puts ’Hi’
Hi
=>   nil
>>
Объекты в Ruby
Все есть объект
• Как и Smalltalk, Ruby это чисты ОО язык -
  все есть объект
• Примитивных типов (int, long, byte, etc)
  не существует
• Описывать переменные не нужно
• Блок кода тоже объект
Что такое объект?

• Хранит состояние
• Может получать сообщения
• Может обрабатывать сообщения
• “Примитивный” тип - объект
 •-1.abs
• nil - объект
 •nil.class
• Класс - объект
 • Object.new
“Типы”
Типы
• Строки
 • С интерполяцией и без
• Числа
• Символы (symbols)
• Массивы
• Ассоциативные массивы, хэши (hash)
Символы
• Символ - это клас
• Создаются добавлением “:” к имени или
  строке
 • :my_symbol
 • :”my symbol”
• Атомарны, неизменны и уникальны
Классы
Классы
• Все объекты принадлежат какому-нибудь
  классу
• У каждого (кроме одного) класса есть
  супер класс
• Корень иерархии
 • Object (1.8)
 • BasicObject (1.9)
наследование


• Единичное наследование
• Подмешивание (Mix-in)
Методы
Особенности
•   Не вызов метода, а     •   ! и ? в конце имен
    посылка сообщения          методов
    объекту
                           •   Скобки вокруг
•   Все методы                 аргументов
    возвращают значение
                           •   Упрощенный
•   Удаление метода            синтаксис для hash

•   method_missing

•   Синтаксический сахар
Типы методов

• Метод класса
• Метод объекта
• Singleton метод
• Метод вне класса
Блоки и Proc

• Ключевое слово yield
• Аргумент метода с “&”
• Замыкания (closure)
объектная модель 1.8
Мир Ruby
Интерпретаторы
•   MRI/YARV (ruby)           •   MacRuby (macruby)

•   Rubinius (rbx)

•   JRuby (jruby)

•   Ruby Enterprise Edition
    (ree)

•   MagLev (maglev)

•   IronRuby (ironruby)
Тестирование

• Test::Unit
• Shoulda
• RSpec
• Cucumber
gEMs

• Централизованное хранилище
 • http://rubygems.org
• Утилита gem
• Gem Bundler
Экосистема RUBY
• github
 • http://github.com
• heroku
 • http://heroku.com
• Google App Engine
• Активное и дружелюбное сообщество
IDE
• NetBeans v6.9.1Ruby Edition
 • http://netbeans.org
• RubyMine
 • http://jetbrains.com/ruby
• TextMate (только Mac OS)
• Sublime Text 2
Ruby on rails
Ruby on rails это...
Ruby on Rails is an open-source web framework
that’s optimized for programmer happines and
sustainable productivity. It lets you write beauriful
code by favoring convention over configuration.

                               http://rubyonrails.org
Историческая справка

• Ruby on Railsбыл создана David
  Heinemeier Hansson в 2003 г.
 • Web development that doesn’t hurt
• Текущая версия 3.0
Особенности
• Основан на архитектуре Model-View-
  Controller (MVC)
• Принцип Don’t Repeat Yourself (DRY)
• Convention Over Configuration
• Генераторы (scaffold)
• “Батарейки в комплект входят”
Model-View-Controller
демо
Вопрос и ответы
контакты
• twitter: vaysman

Contenu connexe

Tendances

Ruby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйRuby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйAlex Mikitenko
 
Андрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaАндрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaDataArt
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)Alexander Gornik
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Ontico
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03Computer Science Club
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Ontico
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014it-people
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014it-people
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Ontico
 

Tendances (14)

Ruby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивыйRuby: интерпретируемый, динамичный, человеколюбивый
Ruby: интерпретируемый, динамичный, человеколюбивый
 
Андрей Беляев - 20 лет Java
Андрей Беляев - 20 лет JavaАндрей Беляев - 20 лет Java
Андрей Беляев - 20 лет Java
 
разработка бизнес приложений (6)
разработка бизнес приложений (6)разработка бизнес приложений (6)
разработка бизнес приложений (6)
 
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
Выбираем поисковик умом головы, Андрей Аксенов (Sphinx)
 
An internal look at HotSpot JVM
An internal look at HotSpot JVMAn internal look at HotSpot JVM
An internal look at HotSpot JVM
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03
 
Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)Как устроен NoSQL, Андрей Аксенов (Sphinx)
Как устроен NoSQL, Андрей Аксенов (Sphinx)
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014А. Аксенов "Как устроен NoSql", DUMP-2014
А. Аксенов "Как устроен NoSql", DUMP-2014
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
А. Аксенов "Как мы разрабатываем Сфинкс", DUMP-2014
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)Цена абстракции, Андрей Аксёнов (Sphinx)
Цена абстракции, Андрей Аксёнов (Sphinx)
 
Кеширование данных в БД
Кеширование данных в БДКеширование данных в БД
Кеширование данных в БД
 

En vedette

Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст примененияNikita Baksalyar
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияMichael Pankov
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011Patrick Walton
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на rubyEvgeny Smirnov
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООПEvgeny Smirnov
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruAlexander Shcherbinin
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...Claudio Capobianco
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyEvgeny Smirnov
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложенийAndrey Sitnik
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"railsclub
 

En vedette (20)

rubygarage
rubygaragerubygarage
rubygarage
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст применения
 
Erlang
ErlangErlang
Erlang
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011
 
Введение в программирование
Введение в программированиеВведение в программирование
Введение в программирование
 
Основы программирования на ruby
Основы программирования на rubyОсновы программирования на ruby
Основы программирования на ruby
 
Ruby: основы ООП
Ruby: основы ООПRuby: основы ООП
Ruby: основы ООП
 
Вторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ruВторая лекция по основам ruby для студентов itc73.ru
Вторая лекция по основам ruby для студентов itc73.ru
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Объектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в rubyОбъектно-ориентированное программирование в ruby
Объектно-ориентированное программирование в ruby
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
 

Similaire à Ruby basics

13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.HappyDev-lite
 
встать на рельсы
встать на рельсывстать на рельсы
встать на рельсыRoman Lemekha
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — LuaYury Yurevich
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...GoQA
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiAlexander Makarov
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsАлександр Ежов
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Open Source − это не больно (Сергей Нартымов)
Open Source − это не больно (Сергей Нартымов)Open Source − это не больно (Сергей Нартымов)
Open Source − это не больно (Сергей Нартымов)Olga Lavrentieva
 

Similaire à Ruby basics (20)

18.08.2012 meta ruby
18.08.2012 meta ruby18.08.2012 meta ruby
18.08.2012 meta ruby
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
 
встать на рельсы
встать на рельсывстать на рельсы
встать на рельсы
 
Migrate!
Migrate!Migrate!
Migrate!
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
Ryazan
RyazanRyazan
Ryazan
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Антипаттерни та велосипеди в JavaScript автоматизації» ...
 
Как разраба
Как разрабаКак разраба
Как разраба
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
 
Rom - Ruby Object Mapper
Rom - Ruby Object MapperRom - Ruby Object Mapper
Rom - Ruby Object Mapper
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Open Source − это не больно (Сергей Нартымов)
Open Source − это не больно (Сергей Нартымов)Open Source − это не больно (Сергей Нартымов)
Open Source − это не больно (Сергей Нартымов)
 

Ruby basics

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. можно заметить на строки\nменьший рассход памяти\nвыделяються в редакторе\n\n
  16. \n
  17. Когда я вижу птицу которая ходит как утка, плавает как утка и крякает как утка - я называю эту птицу уткой\n\n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. рор - программный каркас\n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n