srand 1776 puts(rand (100)) puts(rand(100)) puts(rand(100)) puts(rand (100)) puts(rand(100)) puts '' srand 1776 puts(rand(100)) puts(rand(100)) puts(rand (100)) puts(rand(100)) puts(rand(100))
Одно и то же будет выдаваться каждый раз, когда вы «посеете» то же самое число в качестве зерна. Если вы снова хотите получать различные числа (также, как происходит, если вы не применяли до этого srand), то просто вызовите srand 0. Этим вызовом в генератор «засевается» действительно причудливое число с использованием (кроме всего прочего) текущее время в вашем компьютере, с точностью до миллисекунды.
Объект Math
Наконец, давайте рассмотрим объект Math. Наверное, нам следует сразу окунуться в примеры:
puts(Math::PI)
puts(Math::E)
puts(Math.cos(Math:
:PI/3))
puts(Math.tan(Math:
:PI/4))
puts(Math.log(Math:
:E**2))
puts((1 + Math.sqrt(5))/2)
Первое, что вы, возможно, заметили, это символы :: в обозначениях констант. Объяснение оператора пределов видимости (а это именно он) на самом деле выходит за, хм… пределы этого учебника. Я не хотел каламбурить. Честное слово. Достаточно сказать, что вы можете просто использовать Math::Pi в ожидаемом вами значении.
Как видите, в Math есть всё, что вы предполагаете иметь в приличном научном калькуляторе. И как и прежде, дробные числа действительно близко представляют правильные результаты. [Точность вычислений десятичных чисел ограничена их двоичным представлением в компьютере. –
А теперь перейдём к выполнению!
6. Управление выполнением
Ааааа, управление выполнением… Вот где всё соединяется воедино. И хотя эта глава короче и легче, чем глава о методах, она откроет вам целый мир программных возможностей. После этой главы мы сможем писать по-настоящему интерактивные программы; до этого мы создавали программы, которые выводили разные вещи в зависимости от вашего ввода с клавиатуры, но после этой главы они также будут действительно делать разные вещи. Но прежде, чем мы сможем сделать это, нам нужно иметь возможность сравнивать объекты в наших программах. Нам нужны…
Методы сравнения
Давайте быстро пробежимся по этому разделу, чтобы можно было перейти к следующему разделу, «Ветвления», где будут происходить самые классные вещи. Так, чтобы узнать, что один объект больше или меньше другого, мы применяем методы > и <, вот так:
puts 1 > 2 puts 1 < 2
false
true
Ничего сложного. Подобным же образом мы можем выяснить, что объект больше или равен другому (или меньше или равен) с помощью методов >= и <=.
puts 5 >= 5 puts 5 <= 4
true
false
И наконец, мы можем выяснить, равны ли два объекта или нет, используя == (что обозначает «они равны?») и != (что обозначает «они различны?»). Важно не путать = с ==. = используется, чтобы заставить переменную указывать на объект (присваивание), а == используется для ответа на вопрос: «Эти два объекта равны?»
puts 1 == 1 puts 2 != 1
true
true
Конечно, мы также можем сравнивать строки. Когда сравниваются строки, они сопоставляются в лексикографическом порядке, что обычно означает словарную упорядоченность. cat в словаре идёт перед dog, поэтому:
puts 'cat' < 'dog'
true
Однако, здесь таится ловушка: обычно в компьютерах устроено так, что устанавливается такой порядок букв, в котором заглавные располагаются перед строчными буквами. (Так хранятся буквы в шрифтах, например: сначала все заглавные буквы, а за ними – строчные.) Это означает, что компьютер будет думать, что ' Zoo' располагается перед ' ant', так что, если вы хотите выяснить, какое слово идёт первым в настоящем словаре, обязательно примените метод downcase (или upcase или capitalize) к обоим словам прежде, чем вы попытаетесь их сравнить.
Последнее замечание перед «Ветвлением»: методы сравнения не возвращают нам строки 'true' и 'false'; они возвращают нам специальные объекты true и false.
(Конечно, true.to__ s вернёт нам ' true', именно поэтому puts напечатал ' true'.)
true и false всегда используются для…
Ветвление – это простое, но очень мощное понятие. Фактически, оно настолько простое, что, ей-Богу, мне совсем даже и не нужно объяснять его; я просто покажу его вам:
puts 'Привет, как Вас зовут?' name = gets.chomp puts 'Привет, ' + name + '.' if name == 'Chris'
puts 'Какое милое имя!' end
Привет, как Вас зовут?
Chris
Привет, Chris.
Какое милое имя!
Но если мы введём другое имя…