Ну да, она работает… но это не очень-то красивая программа. Почему не очень? Ну, потому, что лучшее правило, которое я когда-либо узнал в программировании, – это правило DRY (Don't Repeat Yourself), то есть «Не повторяйся!» Возможно. я бы мог написать небольшую книгу только о том, почему это такое хорошее правило. В нашем случае, мы повторили строку puts 'Какое милое имя! '. Почему это так важно? Ладно, а что если я сделал опечатку, когда переписывал её? Что если я хотел изменить с 'милое' на 'прекрасное' в обеих строках? Я же ленивый, помните? По сути, если я хочу, чтобы программа делала одно и то же, когда она получает 'Chris ' или ' Katy ', тогда она должна действительно делать одно и то же:
puts 'Привет, как Вас зовут?' name = gets.chomp
puts 'Привет, ' + name + '.' if (name == 'Chris' or name == 'Katy')
puts 'Какое милое имя!' end
Привет, как Вас зовут?
Katy
Привет, Katy.
Какое милое имя!
Гораздо лучше. Чтобы заставить это заработать, я применил or. Другие логические операции это and и not. [«ИЛИ», «И» и «НЕ» – Прим. перев.] И когда работаешь с ними, лучшим решением будет всегда использовать скобки. Давайте посмотрм, как они работают:
iAmChris = true
iAmPurple = false
iLikeFood = true
iEatRocks = false
puts
(iAmChris
and
iLikeFood)
puts
(iLikeFood
and
iEatRocks)
puts
(iAmPurple
and
iLikeFood)
puts
(iAmPurple
and
iEatRocks)
puts
puts
(iAmChris
or
iLikeFood)
puts
(iLikeFood
or
iEatRocks)
puts
(iAmPurple
or
iLikeFood)
puts (iAmPurple or iEatRocks) puts
puts (not iAmPurple)
puts (not iAmChris )
true
false
false
false
true
true
true
false
true
false
Единственная из них, которая может обмануть вас, – это операция or. В английском языке мы часто используем «or» в значении «один или другой, но не оба». Например, ваша мама могла бы сказать: «На десерт ты можешь съесть торт или пирожное». Она не предполагала, что вы можете съесть и то и другое! Компьютер, напротив, использует or в значении «один или другой или оба». (Другой способ выразить это: «по крайней мере, один из них – истинный».) Вот почему с компьютерами гораздо веселее, чем с мамами.
• «99 бутылок пива на стене…» Напишите программу, которая печатает стихи этой излюбленной классической походной песни: «99 бутылок пива на стене».
• Напишите программу «Глухая бабуля». Что бы вы ни говорили бабуле (чтобы вы ни вводили с консоли), она должна отвечать: АСЬ?! ГОВОРИ ГРОМЧЕ, ВНУЧЕК!, если только вы не кричите ей (вводите слова заглавными буквами). Если вы кричите, она вас слышит (или по крайней мере думает, что слышит) и вопит в ответ: НЕТ, НИ РАЗУ С 1938 ГОДА! Чтобы сделать вашу программу действительно правдоподобной, пусть бабуля кричит каждый раз другой год; например, любой случайный год между 1930 и 1950. (Эта часть необязательная, и вам будет гораздо легче, если вы прочтёте раздел о генераторе случайных чисел в Ruby в конце главы о методах.) Вы не можете остановить разговор с бабулей, пока не прокричите пока.
Подсказка: Не забывайте о chomp/ ' пока ' с символом Enter это не то же самое, что ' пока ' без него/
Подсказка 2: Попробуйте обдумать, какие части вашей программы должны происходить снова и снова. Все они должны находиться внутри цикла while.
• Улучшите вашу программу «Глухая бабуля»: Что если бабуля не хочет, чтобы вы уходили? Когда вы кричите пока, она может притвориться, что не слышит вас. Измените вашу предыдущую программу так, чтобы вам нужно было прокричать пока три раза в одной строке. Удостоверьтесь в правильности вашей программы: если вы прокричите пока три раза, но не в одной строке, вы должны дальше разговаривать с бабулей.
• Високосные годы. Напишите программу, которая будет спрашивать начальный год и конечный год, а затем выдавать с помощью puts все високосные годы между ними (и включая их, если они также високосные). Високосные годы – это годы, нацело делящиеся на 4 (как 1984 и 2004). Однако, годы, нацело делящиеся на 100, – не високосные (как 1800 и 1900) если только они не делятся нацело на 400 (как 1600 и 2000, которые действительно были високосными). (Да, это всё довольно запутанно, но не настолько запутанно, как если бы июль был в середине зимы, что иногда случалось бы.) [если бы не было високосных годов. –