From 5c302c572bed537ef99463b900b7737d3a59869b Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 26 May 2026 21:06:42 +0300 Subject: [PATCH] vault backup: 2026-05-26 21:06:42 --- .obsidian/workspace.json | 23 ++++++++-- 00 Inbox/Знания Ruby.md | 91 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 00 Inbox/Знания Ruby.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 6447ad7..15c085f 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -131,9 +131,24 @@ "icon": "lucide-file", "title": "Итераторы для обработки массивов Ruby" } + }, + { + "id": "b6f523c721c24fc0", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "00 Inbox/Знания Ruby.md", + "mode": "source", + "source": false, + "backlinks": false + }, + "icon": "lucide-file", + "title": "Знания Ruby" + } } ], - "currentTab": 5 + "currentTab": 6 } ], "direction": "vertical" @@ -370,13 +385,14 @@ "terminal:Open terminal": false } }, - "active": "5c30edcd5ebc00c8", + "active": "b6f523c721c24fc0", "lastOpenFiles": [ + "00 Inbox/Итераторы для обработки массивов Ruby.md", + "00 Inbox/Знания Ruby.md", "99 System/Cache/Pasted image 20260526204029.png", "99 System/Cache/Pasted image 20260526203848.png", "99 System/Cache/Pasted image 20260526203807.png", "AGENTS.md", - "00 Inbox/Итераторы для обработки массивов Ruby.md", "99 System/Archive/Работа с API для проекта Attendance Mephi.md", "90 Library/Programming/Ruby On Rails/API импорт в Rails через runner.md", "90 Library/HomeLab/Infrastructure — ada-dev.md", @@ -402,7 +418,6 @@ "99 System/Cache/Pasted image 20260521133832.png", "99 System/Cache/Pasted image 20260521133824.png", "99 System/Cache/Pasted image 20260521133344.png", - "99 System/Cache/Pasted image 20260521133332.png", "90 Library/06 Programming/Ruby On Rails/Rails credentials edit не открывает редактор.md", "90 Library/06 Programming/Ruby On Rails/Sidekiq - основа работы.md", "90 Library/06 Programming/Ruby - массивы.md", diff --git a/00 Inbox/Знания Ruby.md b/00 Inbox/Знания Ruby.md new file mode 100644 index 0000000..31a14d7 --- /dev/null +++ b/00 Inbox/Знания Ruby.md @@ -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-языков. \ No newline at end of file