» Главная
eXcode.ru » Статьи » Ruby
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 11





Простые примеры




Давайте напишем функцию для вычисления факториала. Математическое определение факториала от 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 из-за этого называют "Algol-like". (На самом деле, синтакс 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 здесь - это массив, содержащий аргументы из командной строки, а to_i преобразует строку символов в численное представление.



% 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 в каталоге установкии дистрибутива версию без поддержки ANSI. Вот короткий пример сессии работы с eval.rb:



% ruby eval.rb

ruby> print "Hello, world.\n"

Hello, world.

nil

ruby> exit

hello world выводится функцией print. Следующая строка, в данном случае nil, сообщает о результатах выполнения последней команды; Ruby не делает различий между оператором and выражением, так что обработка куска кода просто означает то же самое, что и его исполнение. В данном случае, nil показывает, что print не вернул никакого определенного значения. Заметьте, что из интерепретатора можно выйти при помощи команды exit, хотя ^D тоже работает.

Далее в этом руководстве "ruby>" означает приглашение для ввода нашей маленькой полезной программки eval.rb.
К началу статьи





Добавил: MadvEXДата публикации: 2007-10-04 09:41:32
Рейтинг статьи:3.00 [Голосов 10]Кол-во просмотров: 5840

Комментарии читателей

Всего комментариев: 0
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Какой жанр фильмов вам нравится?
Ужасы
11% (23)
Триллеры
7% (14)
Комедии
28% (57)
Боевики
4% (8)
Фантастика
27% (54)
Элитарное кино
2% (4)
Мультфильмы (3D, Анимэ)
11% (23)
Мелодраммы
1% (3)
Драммы
2% (4)
Другой
6% (13)

Проголосовало: 203
Драйвер мыши (MOUSE.DRV) не найден, использовать другой драйвер (RAT.DRV)?
Рейтинг: 5.5/10 (2)
Посмотреть все анекдоты