Evgenii Legotckoi
Evgenii Legotckoi18 червня 2016 р. 01:36

Посібник користувача №03 - Ruby - Прості приклади

Давайте напишемо функцію обчислення факторіалів. Математичне визначення факторіалу від n наступне:

n! = 1                (когда n==0)
   = n * (n-1)!       (иначе)

У Ruby це може бути записано так:

def fact(n)
  if n == 0
    1
  else
    n * fact(n-1)
  end
end

Ви можете помітити, що оператор end тут повторюється. Ruby через це називають Алоголо-подібним. (Насправді синтаксис Ruby більше схожий на синтаксис мови Eiffel.) Ви також можете помітити, що відсутній оператор return . Він не потрібен, оскільки Ruby повертає останнє значення з яким вийшов з функції. Використання оператора return* можливе, але не обов'язково.


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

# Программа находит факториал от числа
# Сохраните этот файл как fact.rb

def fact(n)
  if n == 0
    1
  else
    n * fact(n-1)
  end
end

print fact(ARGV[0].to_i), "\n"

Тут присутній масив ARGV, який містить аргументи команди, і конвертування символів рядка в цілісну змінну (integer).

% ruby fact.rb 1
1
% ruby fact.rb 5
120

Давайте запустимо програму з аргументом 40. Це може призвести Ваш калькулятор до переповнення.

% ruby fact.rb 40
815915283247897734345611269596115894272000000000

Але це працює. Насправді Ruby може працювати з будь-яким цілим числом, з яким дозволяє працювати пам'ять комп'ютера. Отже, число 400! Можемо обчислити факторіал і для нього:

% ruby fact.rb 400
64034522846623895262347970319503005850702583026002959458684
44594280239716918683143627847864746326467629435057503585681
08482981628835174352289619886468029979373416541508381624264
61942352307046244325015114448670890662773914918117331955996
44070954967134529047702032243491121079759328079510154537266
72516278778900093497637657103263503315339653498683868313393
52024373788157786791506311858702618270169819740062983025308
59129834616227230455833952075961150530223608681043329725519
48526744322324386699484224042325998055516106359423769613992 
31917134063858996537970147827206606320217379472010321356624 
61380907794230459736069956759583609615871512991382228657857 
95493616176544804532220078258184008484364155912294542753848 
03558374518022675900061399560145595206127211192918105032491 
00800000000000000000000000000000000000000000000000000000000 
0000000000000000000000000000000000000000000

Ми не можемо перевірити правильність цього висновку досить швидко, але він має бути вірним.

Введення та цикл обчислень

Коли Ви викликаєте Ruby без аргументів, він зчитує команди зі стандартного введення і виконує його після закінчення введення:

% ruby
print "hello world\n"
print "good-bye world\n"
^D
hello world
good-bye world

Ruby також поставляється з програмою, яка називається eval.rb, яка дозволяє вам вводити код Ruby з клавіатури в інтерактивному циклі, показуючи вам результат у міру вашого просування. Це буде використовуватись протягом цього посібника.

Якщо Ви маєте ANSI-сумісний термінал (це буде вірним, якщо ви запускаєте програми під UNIX; під DOS Вам потрібно встановити ANSI.SYS або ANSI.COM (на момент перекладу ці утиліти не потрібно встановлювати)), Вам доведеться використовувати наступну програму eval .rb , яка додасть візуальний помічник відступів, звіти про помилки та підсвічування синтаксису. Або ж, пошукайте піддиректорію sample у постачанні Ruby для non-ANSI версії, яка працює у будь-якому терміналі. Нижче наведена коротка сесія eval.rb:

% ruby eval.rb
ruby> print "Hello, world.\n"
Hello, world.
   nil
ruby> exit

hello world надається висновком print. Наступний рядок, у даному випадку nil , повідомляє про останнє отримане значення; Ruby не розрізняє оператори і вирази, тому результат шматка коду в основному означає те саме, що результат виконання функції. Тут nil означає, що print не повертає жодного значення. Зауважте, що ми можемо вийти з циклу інтерпретатора, повідомивши йому exit, хоча Ctrl + D також спрацює.

Протягом цього посібника, "ruby>" позначає введення для нашої корисної маленької програми eval.rb.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 08:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 08:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 19:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 21:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 15:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 14:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 18:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 22:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 14:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 10:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 16:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах