Перейти до вмісту

Ruby

Матеріал з K2 ERP Wiki

Практична роль: Rake дає можливість описувати повторювані задачі Ruby-синтаксисом. Java

name = "Alice"

Практична користь: RuboCop оптимізує підтримувати єдиний стиль Ruby-коду в команді. * Minitest Documentation.== Приватність даних ==

  • нижча продуктивність порівняно з C, Rust, Go або Java в CPU-bound задачах;
  • динамічна типізація здатна приховувати помилки до runtime;
  • великі Rails-проєкти можуть ставати складними;
  • metaprogramming здатна ускладнювати debugging;
  • залежність від gems потребує security control;
  • менша популярність у AI/Data Science;
  • concurrency має свої особливості;
  • startup time здатна бути важливим для деяких сценаріїв. end

Висновок: Ruby часто обирають за швидкість і виразність, Java — за масштабну enterprise-екосистему, типізацію й JVM-інфраструктуру. Ruby має динамічну типізацію.

  • `begin`;
  • `rescue`;
  • `ensure`;
  • `raise`. }`;
  • усе виступає як об’єктом;
  • методи можна викликати без дужок;
  • рядки підтримують interpolation;
  • код часто читається майже як англійський текст.</syntaxhighlight>

Особливе поширення Ruby отримав після появи Ruby on Rails, який зробив мову популярною для швидкої веброзробки. Ruby — це динамічна об’єктно-орієнтована мова програмування, яка робить акцент на читабельності, виразності й продуктивності розробника. calculator = PriceCalculator.new(100, 0.2)

'''Перевага:''' pry часто зручніший за стандартний irb для debugging і дослідження коду.== Nil ==
|-
| Основна роль
| Backend, Rails, scripts
| Frontend, Node.js, full-stack
|-
| Виконання
| Server-side runtime
| Browser і Node.js
|-
| Веб
| Rails backend
| React, Vue, Angular, Node.js
|-
| Синтаксис
| Виразний і DSL-friendly
| Event-driven і browser-native
|}

active = true
]
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

user&.name

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

Поширені помилки:
task :hello do
active_users = users.select { |user| user [:active] }
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
|-
| Основна роль
| Швидка веброзробка
| Швидка веброзробка
|-
| Культура
| Convention over configuration
| Developer-friendly web framework ecosystem
|-
| Deployment
| здатна бути складнішим для початківців
| Часто простіший на shared hosting
|-
| ERP-платформа
| Rails, gems
| Laravel, Composer, широка hosting-підтримка
|}

Ruby широко використовує ітератори.== Обмеження Ruby ==
end

== Перша програма на Ruby ==

* [[Програмування]]
* [[Мова програмування]]
* [[Ruby on Rails]]
* [[Rails]]
* [[Backend]]
* [[Web development]]
* [[API]]
* [[MVC]]
* [[Active Record]]
* [[Gem]]
* [[RubyGems]]
* [[Bundler]]
* [[RSpec]]
* [[Sinatra]]
* [[Python]]
* [[JavaScript]]
* [[PHP]]
* [[Java]]
* [[Налагодження коду]]
* [[Логування]]
* [[Бізнес-логіка]]
* [[Безпека застосунків]]

Ruby і JavaScript часто зустрічаються разом у web development. include Loggable
RSpec.describe User do

Background jobs потрібні для:

Symbol

"File not found"

Запуск: Sinatra — легкий Ruby-фреймворк для вебзастосунків. |- | базовий стиль | Виразний, об’єктно-орієнтований, DSL-friendly | Простий, явний, універсальний |- | Веброзробка | Дуже сильний Rails | Django, Flask, FastAPI |- | Data science / AI | Обмежена ERP-платформа | Дуже сильна ERP-платформа |- | Скрипти | Зручний | Дуже популярний |- | Культура | Developer happiness, convention over configuration | Readability, explicitness, broad ecosystem |}

puts multiply.call(2, 3) Порада: mixins корисні для спільної поведінки, але надмірне використання здатна зробити походження методів неочевидним. ! Module у Ruby застосовується для для групування методів, namespace або mixins. puts "Done" Gemfile.lock фіксує точні версії встановлених gems. !</syntaxhighlight>

user = User.new("Alice")
  • high-performance CPU-bound систем;
  • embedded;
  • системного програмування;
  • realtime low-latency задач;
  • mobile native development;
  • великих AI/ML pipeline;
  • проєктів, де вся команда функціонує в іншому стеку;
  • задач, де потрібна сильна статична типізація з першого дня. gem "pg"

Можливі проблеми: doubled = numbers.map { |n| n * 2 }

'''Практична роль:''' Ruby on Rails особливо сильний для швидкого створення бізнес-застосунків із базою даних, авторизацією, формами й адміністративною логікою. '''Mixin'''  це спосіб додати методи модуля до класу. * Active Record Documentation. Ruby і Java мають різну філософію. }
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
</div>
 puts "No user"

puts squares.inspect

Практична користь: ці методи зменшують boilerplate для доступу до даних об’єкта.
<syntaxhighlight lang="ruby">
'''Практична роль:''' Ruby добре підходить для автоматизації, якщо потрібен читабельний скрипт із доступом до багатої екосистеми gems.</div>
</div>
number = 42
include Trackable

Синтаксис

  • web frameworks;
  • database adapters;
  • authentication;
  • testing;
  • background jobs;
  • API clients;
  • parsing;
  • automation;
  • deployment;
  • logging;
  • security.== Instance variables ==
  • персональні інформаційні дані;
  • паролі;
  • токени;
  • API keys;
  • cookie secrets;
  • session data;
  • email;
  • файли користувачів;
  • logs;
  • backups;
  • third-party gems;
  • background job payloads.== DSL ==

Коротка форма:

Приклад Proc: numbers.each do |number|

end

end end

Висновок: Ruby часто обирають для Rails і виразного backend-коду, Python — для ширшого спектра задач, особливо data science, AI й automation.</syntaxhighlight>

Тематичні мітки

age = 25

puts 10.class Суть прикладу: Ruby дає можливість писати простий код із мінімумом boilerplate. count -= 1 </syntaxhighlight>

name = "Alice"

def greet

Типові помилки початківців

Основні частини:

end

  • невеликих вебсервісів;
  • API;
  • прототипів;
  • webhooks;
  • internal tools;
  • простих backend-застосунків. Практична роль: Proc і lambda корисні для callbacks, functional-style коду й передачі поведінки як даних. module Loggable

Приклад:

printer.call("Hello") describe User do

Ruby часто використовують для створення DSL — domain-specific language. require "minitest/autorun"

'''Symbol'''  це легкий ідентифікатор, який часто застосовують, коли потрібно як ключ у Hash або як назва.== Приклади задач на Ruby ==
<syntaxhighlight lang="ruby">
puts "Hello, world!"
</div>

== pry ==

<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
</div>
 expect(user.name).to eq("Alice")

puts message
через '''Практична користь:''' Bundler користувачі можуть фіксувати версії бібліотек і робити середовище проєкту відтворюваним.</div>

Приклад DSL-подібного синтаксису:

'''Увага:''' `nil` виступає як частим джерелом помилок, тому варто явно опрацьовувати випадки відсутності значення. end

== Тестування ==
'''Hash''' — це структура key-value. Приклад:

'''Перевага:''' Ruby-екосистема має зрілі інструменти для unit, integration і acceptance testing. '''Головне правило:''' хороший Ruby-код має бути читабельним, простим, протестованим і без зайвої магії. '''Block''' — це фрагмент коду, який можна передати методу. irb
</div>
! * веброзробки;
* backend-застосунків;
* Ruby on Rails;
* API;
* скриптів;
* автоматизації;
* CLI-інструментів;
* тестування;
* DevOps-задач;
* data processing у невеликих сценаріях;
* прототипування;
* внутрішніх адміністративних систем. class PriceCalculator

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

 puts "Generating report..."

Ruby-застосунки часто працюють із користувацькими й бізнес-даними. Для багатьох вебзастосунків продуктивність розробки важливіша за максимальну швидкість виконання. Приклад:

</div>

class Service
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
 end
'''Суть динамічної типізації:''' програміст швидше пише код, але частина помилок типів здатна проявитися лише під час виконання.== Ruby і DevOps ==
end
attr_reader :name
  • Ruby on Rails застосунків;
  • SaaS;
  • MVP;
  • внутрішніх бізнес-систем;
  • адміністративних панелей;
  • API;
  • e-commerce;
  • маркетплейсів;
  • automation scripts;
  • DevOps-скриптів;
  • тестових DSL;
  • швидкого backend-прототипування. Основні типи в Ruby:

Ruby у веброзробці застосовується для для: count = 10

Головна перевага: Ruby дає можливість оперативно писати виразний і зрозумілий код, особливо для вебзастосунків і бізнес-логіки. Array — це впорядкований список елементів.== Sinatra ==

</div>

 end
Приклади:
Приклад:

end

 a + b

Приклад lambda:

 puts number
Особливості синтаксису:

== Змінні ==
user = nil
 @tax_rate = tax_rate
 puts count
Приклад namespace:

 def initialize

<syntaxhighlight lang="ruby">
Запуск:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

age = 20

== Background jobs ==

'''Metaprogramming''' — це можливість програми створювати або змінювати код під час виконання. bundle install

 def initialize(name, email)

Ruby on Rails часто порівнюють із PHP-фреймворками. Ruby підтримує різні способи повторення. '''Rake''' — це build automation tool для Ruby. Python

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Приклад mixin:
else

Але в Ruby частіше використовують ітератори:

Приклад `Rakefile`:
<syntaxhighlight lang="ruby">
text = "Ruby"
3.times do |i|
Це потрібно для:

</syntaxhighlight> </syntaxhighlight>

}

numbers = [1, 2, 3, 4, 5]
'''RuboCop'''  linter і formatter для Ruby. Тип змінної не потрібно оголошувати явно. * RubyGems Documentation. Приклад:
'''Практична роль:''' Ruby добре підходить для DSL, тому що має гнучкий синтаксис, blocks і metaprogramming. end

* Chef;
* Puppet;
* deployment scripts;
* Rake tasks;
* automation tools;
* log processing;
* internal scripts;
* CI utilities. Вона особливо відома через Ruby on Rails, який став одним із найвпливовіших web frameworks для швидкого створення бізнес-застосунків. Критерій
Ruby поєднує простий синтаксис із потужними можливостями об’єктно-орієнтованого програмування, блоків, ітераторів, модулів, metaprogramming і динамічної типізації. * backend;
* REST API;
* monolith applications;
* SaaS;
* admin panels;
* e-commerce;
* marketplaces;
* startup MVP;
* internal business tools.== Загальний SEO-опис ==
`nil` означає відсутність значення. service = Service.new
 def self.add(a, b)
<syntaxhighlight lang="ruby">

<syntaxhighlight lang="ruby">

* моделей;
* міграцій;
* асоціацій;
* validations;
* database queries;
* persistence;
* callbacks. Приклад:
<syntaxhighlight lang="ruby">
== Класи ==

end

=== Клас сервісу ===

* `Integer`;
* `Float`;
* `String`;
* `Symbol`;
* `Array`;
* `Hash`;
* `Boolean`;
* `NilClass`;
* `Range`;
* `Regexp`;
* `Time`;
* `Class`;
* `Module`.

Proc і Lambda

Ruby має виразний і компактний синтаксис. gem "puma"

@value = 0

Суть module: модулі дозволяють організовувати код і повторно використовувати поведінку без класичного множинного наслідування. puts "Minor"

  • Convention over Configuration;
  • Don’t Repeat Yourself;
  • швидка розробка програмного забезпечення;
  • інтеграційні функції ERP з базами даних;
  • генератори коду;
  • Active Record;
  • MVC-архітектура.
@value += 1
Практична роль: Array у Ruby має багато зручних методів для обробки колекцій.

RSpec відомий DSL-стилем, який читається майже як SEO-опис поведінки. age: 25,

'''Практична роль:''' blocks роблять Ruby дуже зручним для роботи з колекціями, DSL, callbacks і ресурсами. end
 { name: "Alice", active: true },
'''Bundler''' керує залежностями Ruby-проєкту.== Коли варто використовувати Ruby ==
 end

 "Hello, #{@name}!"

== RuboCop ==

rescue Errno::ENOENT
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
[:name, :email].each do |field|
Типізація Динамічна Статична
Синтаксис Компактний Більш формальний
Швидкість розробки Дуже висока для вебзастосунків Висока в enterprise-екосистемі, але більше boilerplate
Runtime Ruby VM JVM
Enterprise виступає як, але менше за Java Дуже сильна enterprise-екосистема
def add(a, b)
user = { name: "Alice", age: 25 }

</div>

Необхідно контролювати:

* читабельний синтаксис;
* висока продуктивність розробника;
* Ruby on Rails;
* потужні blocks;
* зручні collections;
* активна gem-екосистема;
* DSL-friendly стиль;
* metaprogramming;
* хороша культура тестування;
* швидке прототипування;
* зручність для MVP;
* developer happiness;
* гнучкість. '''Суть методу:''' метод у Ruby здатна бути коротким і виразним, без зайвої службової конструкції.
  • Ruby;
  • Ruby on Rails;
  • PostgreSQL;
  • Redis;
  • Sidekiq;
  • Puma;
  • Nginx;
  • Hotwire або React/Vue;
  • RSpec;
  • Docker.== історія продукту Ruby ==
У цьому прикладі:

</div>

! puts "Adult" if age >= 18

<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

! Ruby має обмеження. * RuboCop Documentation. get "/" do

Modules

end
status = :active
 @name = name

'''String'''  це рядок тексту.<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

 end

== Джерела ==

end
module MathUtils
Залежності описуються у файлі `Gemfile`. puts MathUtils.add(2, 3)
puts sum
Ruby і Rails-застосунки потребують звичайних практик безпеки. [1, 2, 3].each { |number| puts number }

* задач збірки;
* міграцій;
* тестів;
* імпорту даних;
* автоматизації;
* скриптів підтримки;
* deployment tasks. Запуск:
Приклад:

user = User.new("Alice")

Практичний висновок: Ruby часто відповідає за backend, а JavaScript — за frontend, хоча обидві мови можуть використовуватися ширше.</syntaxhighlight>

class Counter class User

Типи даних

puts user.greet

  • немає обов’язкових крапок із комою;
  • блоки можуть писатися через `do ... Практична роль: RubyGems дає доступ до великої екосистеми бібліотек Ruby.=== Фільтрація даних ===

Ruby — це динамічна, інтерпретована, об’єктно-орієнтована мова програмування, відома простим і виразним синтаксисом, зручністю для розробника, активною екосистемою бібліотек і популярністю у веброзробці через фреймворку Ruby on Rails.</syntaxhighlight>

puts read_file("missing.txt")

!

def log(message)

user.email = "alice@example.com" Практична роль: класи в Ruby використовуються для моделювання об’єктів, бізнес-логіки, сервісів і доменних сутностей. ensure class User </syntaxhighlight>

</syntaxhighlight>

Mixins

puts nil.class

<syntaxhighlight lang="ruby">
 active: true

Приклад:
</div>
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">

Ruby часто використовують для вебзастосунків, автоматизації, скриптів, CLI-інструментів, прототипування, тестування, DevOps-задач і внутрішніх бізнес-систем. * `User` — клас;
* `initialize` — конструктор;
* `@name` — instance variable;
* `greet` — метод об’єкта. require "sinatra"

У Ruby не потрібно явно оголошувати функцію `main`. Встановлення залежностей:
 { name: "Carol", active: true }
users = [

end

end

* плутанина між String і Symbol;
* надмірне використання monkey patching;
* ігнорування `nil`;
* занадто великі класи;
* слабка обробка exceptions;
* залежність від глобального стану;
* відсутність тестів;
* неправильне використання blocks;
* непотрібне metaprogramming;
* незафіксовані версії gems;
* ігнорування performance проблем у запитах до бази;
* N+1 queries у Rails;
* логування секретів.

Критично: Rails має багато захисних механізмів, але неправильний код, небезпечні gems або помилки доступів все одно можуть створювати вразливості. puts "Hello from Rake"

</div>

end

'''Active Record''' — це ORM, який став популярним через Ruby on Rails.<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
Приклад:
'''Критично:''' metaprogramming дуже потужний, але надмірне використання здатна зробити код складним для читання, пошуку й debugging. Приклади:

end

end Ruby застосовується для в DevOps і infrastructure automation. end

name: "Alice",
end
  • оперативно перевіряти код;
  • тестувати методи;
  • експериментувати з синтаксисом;
  • перевіряти об’єкти;
  • навчатися Ruby. Ruby

критично: Ruby сильний у своїй ніші, але не виступає як універсальним вибором для всіх видів програмного забезпечення. * `attr_reader` створює getter;

  • `attr_writer` створює setter;
  • `attr_accessor` створює getter і setter.
File.read(path)
puts i
Небезпека: Ruby дає можливість писати дуже гнучкий код, але без дисципліни ця гнучкість здатна перетворитися на складну для підтримки “магію”.
<syntaxhighlight lang="ruby">

Популярні інструменти:

* вебзастосунків;
* REST API;
* SaaS-продуктів;
* адміністративних панелей;
* маркетплейсів;
* CRM;
* e-commerce;
* внутрішніх бізнес-систем;
* MVP;
* стартап-продуктів. a + b

service.log("Started")

* Sinatra Documentation.== Безпека Ruby-застосунків ==

puts even.inspect

puts "Error: #{e.message}"
"Hello from Sinatra"

Symbols часто використовуються в Rails, конфігураціях, DSL і API. end` або `{ ... Ruby / Rails

Order.new.track

  • Perl;
  • Smalltalk;
  • Lisp;
  • Eiffel;
  • Ada;
  • CLU;
  • Python.
     result = 10 / 0
     def initialize(name)
    </div>
    end
     end
    == Rake ==
    
    <div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
    
    <div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
    while count > 0
    Ruby найбільш відомий у web development через Rails.<syntaxhighlight lang="ruby">
    
     @name = name
    
     puts "Tracked"
    
    * Sidekiq;
    * Resque;
    * Delayed Job;
    * GoodJob;
    * Active Job.
    

numbers = [1, 2, 3, 4, 5]

Перевага: Ruby має зручні методи для роботи з рядками, що робить мову корисною для скриптів і текстової обробки.

</syntaxhighlight>

  • dependency vulnerabilities;
  • SQL injection;
  • XSS;
  • CSRF;
  • mass assignment;
  • unsafe deserialization;
  • secrets;
  • session security;
  • authentication;
  • authorization;
  • background jobs;
  • file uploads;
  • logging sensitive data.

user = {

Приклади DSL у Ruby-екосистемі:

}

Див. так само

<syntaxhighlight lang="ruby">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
Навіть числа, рядки й `nil` мають методи. Active Record застосовується для для:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

* `each`;
* `map`;
* `select`;
* `reject`;
* `find`;
* `reduce`;
* `sort`;
* `uniq`;
* `compact`.== Ruby і PHP ==

if age >= 18
</div>
Приклад:
message = "Hello, #{name}!"
 status: :active

Rails відомий принципами:

items = [1, 2, 3]

Приклад:

Ruby має сильну культуру тестування. Типовий стек:

'''irb''' або '''Interactive Ruby'''  це інтерактивна консоль Ruby. Класи створюються через `class`. if user.nil? Ruby повертає останній вираз методу автоматизовано, якщо немає явного `return`.

Тип змінної визначається під час виконання.

=== Проста обробка помилки ===

== RubyGems ==

'''Правило:''' секрети не повинні зберігатися в коді, Git-репозиторії або відкритих логах.</div>
== Metaprogramming ==
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">
 instance_variable_get("@#{field}")
source "https://rubygems.org"

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
begin
<syntaxhighlight lang="ruby">

=== Rake task ===
</div>
== Висновок ==

Приклад:

 puts "Adult"

name = "Alice"

* відтворюваних builds;
* однакових версій у команді;
* стабільного deployment;
* зменшення ризику несподіваних оновлень;
* security audit.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Ruby і JavaScript ==

even = numbers.select { |n| n.even? { name: "Bob", active: false },
</div>
Rails застосовується для для створення:

<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
Приклад:
Приклад `while`:

'''Висновок:''' Rails підходить для повноцінних вебзастосунків, а Sinatra  для легших і простіших сервісів. * Документація rbenv і RVM. Ruby увібрав ідеї з різних мов:

user = {

* Rails routes;
* RSpec tests;
* Rake tasks;
* Sinatra routes;
* configuration files;
* deployment scripts. JavaScript
task :report do

rake hello

gem install rails

  • писати прості методи;
  • уникати надмірного metaprogramming;
  • використовувати Bundler;
  • фіксувати версії залежностей;
  • писати тести;
  • запускати RuboCop;
  • перевіряти security advisories;
  • не ігнорувати `nil`;
  • не робити занадто великі класи;
  • використовувати service objects там, де це доречно;
  • логувати помилки;
  • не зберігати secrets у коді;
  • підтримувати зрозумілу структуру проєкту;
  • регулярно оновлювати gems. Критерій

Приклад:

Основні конкурентні переваги Ruby:

</syntaxhighlight>

sum = numbers.reduce(0) { |acc, n| acc + n } Приклад:

Iterators

Приклад Minitest:

Популярні інструменти:

puts "Name: #{name}, age: #{age}"

У Ruby майже все виступає як об’єктом. Gems використовуються для: module Trackable

Ruby виступає як об’єктно-орієнтованою мовою. Помилка: вважати Ruby повільним або непридатним для бізнесу лише через стереотипи. rbenv і RVM — інструменти для керування версіями Ruby.

multiply = ->(a, b) { a * b } Proc і lambda дозволяють зберігати блок коду як об’єкт.== Ruby і Java ==

Об’єкти

Приклад: Ruby має звичні умовні конструкції. * RSpec;

  • Minitest;
  • Capybara;
  • FactoryBot;
  • SimpleCov;
  • Shoulda Matchers;
  • VCR;
  • WebMock. Rake застосовується для для:

Порада: для командних проєктів варто явно фіксувати версію Ruby, як приклад у `.ruby-version`. end

</syntaxhighlight>

Основна ідея: Ruby створений як мова, у якій код має бути зрозумілим, виразним і приємним для програміста. expect(user.name).to eq("Alice") user.save

Приклад:

критично: Ruby став відомим не лише через саму мову, а й через культуру розробки, де цінується простота, читабельність і convention over configuration. так само виступає як коротка форма:

@email = email
puts "[LOG] #{message}"

rescue ZeroDivisionError => e

puts "hello".class

Exception handling

У Ruby/Rails часто використовують background jobs.== Умови ==

Приклад:

</syntaxhighlight>

Blocks

Ruby підтримує string interpolation через `#{...}`.

[1, 2, 3].each do |number|

 def track
Вони дозволяють:
class User

Ruby добре підходить для:

end

== Коли Ruby здатна бути невдалим вибором ==

</div>

Ruby був створений Юкіхіро Мацумото, так само відомим як Matz, у 1990-х роках. * RSpec Documentation. PHP / Laravel
== Ruby on Rails ==

Методи

puts user [:name]

Метод у Ruby оголошується через `def`. Ruby

  • підтримувати стиль коду;
  • знаходити типові помилки;
  • автоматизовано виправляти частину проблем;
  • контролювати complexity;
  • перевіряти Rails-specific правила;
  • стандартизувати код у команді. ruby hello.rb

numbers = [1, 2, 3, 4, 5]

</syntaxhighlight>

@price = price

puts calculator.total

attr_reader, attr_writer і attr_accessor

Потрібно контролювати: </syntaxhighlight> puts doubled.inspect puts active_users.inspect

Головна думка: Ruby — це мова для швидкої, виразної й зручної розробки, особливо у вебі, але її гнучкість потребує дисципліни, тестів і хорошої архітектури. Запуск:

end

</syntaxhighlight>

end

end Ruby здатна бути не найкращим вибором для: У `irb` можна: squares = numbers.map { |number| number * number }

gem "rails"

Ruby добре підходить для веброзробки, MVP, SaaS, API, автоматизації, скриптів, тестування й внутрішніх бізнес-систем.
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

</div>

== Bundler ==

== Gemfile.lock ==

* інтерактивного debugging;
* inspecting об’єктів;
* перегляду методів;
* зупинки виконання;
* експериментів у runtime. * email-розсилок;
* імпорту даних;
* генерації звітів;
* обробки файлів;
* webhook processing;
* scheduled tasks;
* інтеграцій;
* довгих операцій.</div>

Ruby часто порівнюють із Python. Ruby Приклад:

@email = email

Підказка: Ruby-код часто стає кращим, коли використовує колекції, blocks і маленькі методи замість довгих процедур. це популярний web framework для Ruby виступає ключовою рисою Ruby on Rails або Rails. Код у файлі виконується зверху вниз. {| class="wikitable"

Хороші практики Ruby

Приклади: nothing = nil Методи Array:

rubocop
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
'''RubyGems'''  це платформа пакетів для Ruby.<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">
 define_method(field) do

puts [1, 2, 3].class

 @name = name

<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">

* встановлювати різні Ruby versions;
* перемикатися між версіями;
* мати окремі версії для проєктів;
* відтворювати середовище;
* тестувати сумісність. * Ruby Documentation. Active Record дає можливість працювати з таблицями бази даних як з Ruby-об’єктами.</div>
</div>
puts add(2, 3)

end
 @price + (@price * @tax_rate)
count = 3
 def total
== rbenv і RVM ==

<syntaxhighlight lang="ruby">
 it "has a name" do
Blocks виступає як однією з ключових особливостей Ruby. Їх краще переносити в background jobs. Критерій

<syntaxhighlight lang="ruby">

* `define_method`;
* `method_missing`;
* `send`;
* `class_eval`;
* `instance_eval`;
* dynamic dispatch;
* modules;
* hooks. '''Практична роль:''' irb зручний для швидких експериментів і навчання Ruby.== Active Record ==

'''Практична роль:''' RSpec зручний для behavior-driven testing і добре інтегрується з Rails-проєктами. * Ruby on Rails Guides. Класичний приклад:
'''критично:''' довгі або нестабільні задачі не варто виконувати прямо в web request.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

== irb ==
RuboCop оптимізує:
 it "has a name" do
'''Порада:''' Symbol добре підходить для імен і ключів, які не потрібно змінювати як текст. Приклад:
'''Практична роль:''' instance variables дозволяють об’єкту зберігати власний стан.<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

== Hash ==
'''Висновок:''' Rails і Laravel мають схожий фокус на продуктивності веброзробника, але належать до різних мовних екосистем. Критерій

def add(a, b)
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
{| class="wikitable"

</div>

</div>

== Array ==

'''критично:''' Ruby-код часто виглядає ідіоматичніше з `each`, `map`, `select` і `times`, ніж із класичними циклами.</div>
def read_file(path)
</div>

 end

end

'''Суть ітераторів:''' Ruby заохочує описувати, що зробити з колекцією, а не вручну керувати індексами. * Bundler Documentation. class AddTest < Minitest::Test
 def test_add
 assert_equal 5, add(2, 3)
 end
end

Web development

Sinatra підходить для:

конкурентні переваги Ruby

Рекомендовано:

Ruby застосовується для для: end

У Ruby mixins часто використовуються замість множинного наслідування. end Практична роль: Ruby on Rails зробив Ruby одним із найпопулярніших інструментів для швидкого створення вебзастосунків. Практична роль: Active Record зменшує кількість ручного SQL у типових вебзастосунках. Ruby має зручний safe navigation operator:

attr_accessor :email

Ruby і Python

end

Instance variables зберігають стан конкретного об’єкта й починаються з `@`. RSpec — популярний testing framework для Ruby. printer = Proc.new { |message| puts message } user = User.find(1)

def increment
  • конфігурацій;
  • параметрів;
  • JSON-подібних структур;
  • API-відповідей;
  • об’єктів без окремого класу;
  • options у методах. a + b

SEO title: Ruby — мова програмування для веброзробки, скриптів, автоматизації, Rails і продуктивної розробки

SEO keywords: Ruby, мова програмування Ruby, Ruby programming language, Ruby on Rails, Rails, gem, RubyGems, Bundler, irb, rbenv, RVM, object-oriented programming, dynamic language, blocks, iterators, modules, mixins, metaprogramming, Active Record, Sinatra, RSpec, Minitest, веброзробка, програмування, скриптинг, автоматизація

</noinclude>
 {{SEO
Шаблон для службового SEO-опису сторінки. 

}}


Практична користь: Hash зручний для роботи з даними, де критично оперативно отримувати значення за ключем. Hash часто застосовується для для:

'''Практична порада:''' Ruby варто обирати, коли важливі швидкість розробки, зрозуміла бізнес-логіка, Rails-екосистема й хороша культура тестування.<syntaxhighlight lang="ruby">
 end
Pry застосовується для для:

Цикли

</syntaxhighlight>

end
'''критично:''' exceptions потрібно використовувати для помилкових ситуацій, а не для звичайного flow control. '''Суть Ruby OOP:''' Ruby послідовно застосовує об’єктну модель майже до всіх значень. '''Суть умов:''' Ruby дає можливість писати як класичні, так і дуже компактні перевірки.<syntaxhighlight lang="ruby">
 name: "Alice",
! Водночас для системного програмування, embedded, AI/ML або дуже високопродуктивних CPU-bound задач зазвичай краще підходять інші мови.<syntaxhighlight lang="ruby">

Приклад:
 def initialize(name, email)
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
<syntaxhighlight lang="bash">
'''Перевага:''' Ruby дає можливість оперативно писати зрозумілий код і часто скорочує шлях від ідеї до робочого застосунку.=== Обробка списку ===
<syntaxhighlight lang="ruby">
Пакет у Ruby називається '''gem'''.

Практична роль: синтаксис Ruby орієнтований на читабельність і швидке написання коду.</syntaxhighlight>

  • офіційний сайт Ruby.</syntaxhighlight>

</syntaxhighlight>

== String ==

pry — популярна альтернативна консоль і debugging tool для Ruby.<syntaxhighlight lang="ruby">

RSpec

class Order

puts number

Ruby підтримує metaprogramming через:

Практична роль: базові типи Ruby зручні для швидкої роботи з текстами, списками, словниками й об’єктами. Мова проєктувалася з фокусом на зручність і продуктивність програміста. Встановлення gem: gem "rspec" <syntaxhighlight lang="ruby">

Ruby використовує exceptions для обробки помилок.

def initialize(price, tax_rate)

критично: у застосунках `Gemfile.lock` зазвичай потрібно зберігати в системі контролю версій. price = 19.99

Ruby має зручні помічники для доступу до полів. * Ruby