vault backup: 2026-05-26 21:06:42
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-26
|
||||
title:
|
||||
---
|
||||
## Значение по умолчанию
|
||||
|
||||
В Ruby широко используется такой код:
|
||||
|
||||
```
|
||||
a ||= 'что-то'
|
||||
# a = a || 'что-то'
|
||||
```
|
||||
|
||||
Он используется для задания значения по умолчанию. Такое возможно и почти всегда безопасно из-за очень ограниченного списка _falsey_ значений. Единственное место, где этот способ не сработает – там, где `false` это допустимое значение.
|
||||
|
||||
## Предикаты
|
||||
|
||||
В Ruby в отличие от большинства других языков принято использовать предикаты практически для всех часто встречающихся проверок. Например, как мы обычно проверяем, что число равно нулю? С помощью сравнения с нулем. В Ruby это тоже работает, но это не Ruby Way:
|
||||
|
||||
```
|
||||
0.zero? # true
|
||||
1.zero? # false
|
||||
2.positive? # true
|
||||
|
||||
# чётное/нечётное
|
||||
8.even? # true
|
||||
8.odd? # false
|
||||
|
||||
''.empty? # true
|
||||
'wow'.empty? # false
|
||||
|
||||
something.nil?
|
||||
|
||||
# не пустой массив
|
||||
items.any?
|
||||
# пустой массив
|
||||
items.empty?
|
||||
```
|
||||
|
||||
## Логические операторы
|
||||
|
||||
Логический тип в Ruby представлен привычными значениями `true` и `false`, а также набором операторов `&&` (и), `==` (равно), `||` (или) и `!` (не):
|
||||
|
||||
```
|
||||
true && false # false
|
||||
false || true # true
|
||||
```
|
||||
|
||||
В отличие от многих других языков сравнение с логическим значением в Ruby строгое, то есть `true` и `false` равны только самим себе:
|
||||
|
||||
```
|
||||
true == 1 # false
|
||||
false == nil # false
|
||||
```
|
||||
|
||||
Что не отменяет возможности использовать в логических выражениях значения любых типов:
|
||||
|
||||
```
|
||||
0 && 'one' # "one"
|
||||
nil && false # nil
|
||||
```
|
||||
|
||||
В Ruby только `nil` и `false` рассматриваются как _falsey_, все остальные значения в логических выражениях приводятся к `true`.
|
||||
|
||||
|
||||
Условия в Ruby выглядят похожими на условия в других языках:
|
||||
|
||||
```
|
||||
def sentence_type(text)
|
||||
# проверяем последний символ в строке
|
||||
if text.end_with?('?')
|
||||
'question' # снова нет return
|
||||
elsif text.end_with?('!')
|
||||
'exclamation' # и тут
|
||||
else
|
||||
'statement' # и тут
|
||||
end
|
||||
end
|
||||
|
||||
sentence_type 'anybody here?' # question
|
||||
sentence_type 'Hexlet for humans' # statement
|
||||
sentence_type 'boo!' # exclamation
|
||||
```
|
||||
|
||||
В Ruby условиям не нужны скобки. Выражения пишутся сразу после ключевого слова `if`. Для дополнительных условий используется ключевое словое `elsif`. И для всего остального — привычный `else`. В конце добавляется `end`.
|
||||
|
||||
В примере используется предикат (функция, возвращающая `true` или `false`) `end_with?()`. Ключевое отличие Ruby от других популярных языков — в использовании знака вопроса на конце, вместо `is` и его аналогов в начале. Этот подход перекочевал из Lisp-языков.
|
||||
Reference in New Issue
Block a user