Please enable JavaScript.
Coggle requires JavaScript to display documents.
Ruby on Rails Beginner (Идеомы в Ruby
Сложившийся в ЯП прием выражать…
Ruby on Rails Beginner
Основы Ruby часть 1
Классификация ЯП
По испольнению
Компилируемые
Программу даем на вход компилятору, компилятор проверяет на правильность и отдает компилируемый файл (с++, с). Такие языки очень быстрые, т.к. нет никакого посредника во время выполнения.
Интерпретируемые
Не выполняются напрямую процессором. Все выполняется интерпретатором. Интерпретатор исполняет программу построчно. Такие языки всегда медленнее чем, компилируемые.
По типизации
Статическая\Динамическая
Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции. Т.е. уже компилятор на 100% уверен, какой тип где находится. В динамической типизации все типы выясняются уже во время выполнения программы.
Строгая\Нестрогая
Сильная типизация выделяется тем, что язык не позволяет смешивать в выражениях различные типы и не выполняет автоматические неявные преобразования, например нельзя вычесть из строки множество. Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
-
Ruby
-
Динамическая, Строгая, Неявная типизация
-
-
Основы Ruby часть 2
Класс, объекты и методы
-
-
Каждый объект имеет уникальный object_id, даже если данные одинаковые
Для символов object_id всегда одинаковый
'a'.object_id == 'a'.object_id # false
:a.object_id == :a.object_id # true
ООП Ruby
Абстракция
Набор значимых свойств и методов, характеризующих объект
-
Наследование
-
-
Дочерний - тот, который наследует
-
-
Метапрограммирование
eval
метод класса Kernel, доступен из любой точки программного кода
-
ClassName.class_eval
ClassName.class_variables
[:@a, :@b]
ClassName.class_variable_get(:@a)
nil, если переменной не существует
ClassName.class_variable_set(:@a, 5)
таким способом можно создавать новые переменные
class A
define_method(:a) do
puts 'a'
end
end
тоже самое, что и def a, только во время выполнения
ClassName.const_set(A, 5)
ClassName.const_get(A)
-
-
Method missing
Поиск метода в классе:
- по имени
- method_missing, если определен
- ошибка, если method_missing отсутствует
-
-
ActiveRecords
Ассоциации ActiveRecords
Создание
-
Создать миграцию
add_belongs_to :trains, :railway_station
-
Типы
one to many
В файле миграции
add_belongs_to :trains, :current_station
В классе модели
belongs_to :current_station, class_name: 'RailwayStation', foreign_key: :current_station_id, required: false
-
-
many to many
-
-
В остальных классах
has_many :railway_stations_routes
has_many :railway_stations, through: :railway_stations_routes
Жизненный цикл объекта
Создание
before_validation
after_validation
before_save
arround_save
before_create
arround_create
after_create
after_save
after_commit/after_rollback
Изменение
before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
after_commit\after_rollback
-
-
-
-
-
Контроллеры
фильтры
возможность выполнять код до или после выполнения контроллера. Выполняются в последовательности, в которой они написаны.
-
-
-
Жизненный цикл запроса
Парсинг запроса
Роутинг(создание экземпляра контроллера и вызов экшена)
Запуск цепочки : before_action
around_action
Выполнение экшена
Рендеринг вида
around_action
after_action
Редирект прерывает цикл
-