П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 180063 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 78103 раз(а).

Учебник HTML.
Просмотров 75522 раз(а).

Руководство по PHP5.
Просмотров 46578 раз(а).

Хостинг через призму DNS.
Просмотров 53966 раз(а).

Подборка текстов стандартных документов.
Просмотров 46499 раз(а).

Учебник PHP - Самоучитель
Просмотров 52655 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 53252 раз(а).

Внешние атаки...
Просмотров 43065 раз(а).

Учебник PHP.
Просмотров 38632 раз(а).

SSI в примерах.
Просмотров 28578 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 4: Управляющие структуры.
4.2 Оператор if/unless

Следующей по сложности управляющей структурой является оператор if. Эта конструкция состоит из управляющего выражения (проверяемого на истинность) и блока. В ней также может быть часть, начинающаяся оператором else, за которой следует еще один блок операторов. Другими словами, все это выглядит так:

if (выражение) {
  оператор_1
  оператор_2
  оператор_3

} else {
  оператор_1
  оператор_2
  оператор_3
}

(Если вы любите программировать на С и Java, то для вас должна быть вполне очевидной обязательность фигурных скобок. Они устраняют необходимость в применении правила "путающего зависшего else".)

Во время выполнения Perl-программы вычисляется управляющее выражение. Если оно истинно, то выполняется первый блок операторов в приведенном выше примере. Если выражение ложно, то выполняется второй блок.

Что же такое "истина" и "ложь"? В Perl эти правила несколько странноваты, но, тем не менее, дают ожидаемые результаты. Управляющее выражение вычисляется как строковая величина в скалярном контексте (если это уже строка, ничего не изменяется, а если это число, то оно преобразуется в строку*). Если данная строка либо пуста (т.е. имеет нулевую длину), либо состоит из одного символа "О" (цифры нуль), то значение выражения — "ложь". Все остальное автоматически дает значение "истина". Почему же в Perl столь забавные правила? А потому, что это облегчает условный переход не только по нулю (в противоположность ненулевому числу), но и по пустой (в противоположность непустой) строке, причем без необходимости создания двух версий интерпретируемых значений "истина" и "ложь". Вот несколько примеров интерпретации этих значений:

О       # преобразуется в "О", поэтому "ложь"
1-1     # дает в результате 0, затем преобразуется в "О", поэтому "ложь"
1       # преобразуется в "1", поэтому "истина"
""      # пустая строка, поэтому "ложь"
"1"     # не "" или "О", поэтому "истина"
"00"    # не "" или "О", поэтому "истина" (это странно, поэтому будьте настороже)
"0.000" # "истина" — будьте внимательны, по той же причине
undef   # дает в результате "", поэтому "ложь"

* Внутренне все трактуется несколько иначе, но внешне все выполняется так, будто именно это и происходит.

Таким образом, интерпретация значений как истинных или ложных достаточно интуитивна, но пусть это вас не пугает. Вот пример полного оператора if:

print "how old are you? ";
$a = <STDIN>;
chomp($a) ;

if ($a < 18) {
  print "So, you're not old enough to vote, eh?\n";

} else {
  print "Old enough! Cool! So go vote! \n";
  $voter++; # count the voters for later
}

Блок else можно опустить, оставив только часть, касающуюся then:

print "how old are you? ";
$a - <STDIN>;
chomp($a) ;
if ($a < 18) {
  print "So, you're not old enough to vote, eh?\n";
}

Иногда бывает удобно часть "then" опустить и оставить только else, потому что более естественно сказать "сделайте то, если это ложь", нежели "сделайте то, если это — не истина". В Perl этот вопрос решается с помощью оператора unless:

print "how old are you? ";
$a = <STDIN>;
chomp ($a) ;

unless ($a < 18) {
  print "Old enough! Cool! So go vote!\n";
  $voter++;
}

Заменить if на unless — это все равно что сказать "Если управляющее выражение ложно, сделать..." (Оператор unless может содержать блок else, как и оператор if.)

Если у вас больше двух возможных вариантов, введите в оператор if ветвь elsif, например:

if (выражение один) {
  оператор_1_при_истине_один;
  оператор_2_при_истине_один;
  оператор_3_при_истине_один;

} elsif (выражение_два) {
  оператор_1_при_истине_два;
  оператор_2_при_истине_два;
  оператор_3_при_истине_два;

} elsif (варажение_три) {
  оператор_1_при_истине_три;
  оператор_2_при_истине_три;
  оператор_3_при_истине_три;

} else {
  оператор_1_при_всех_ложных;
  оператор_2_при_всех_ложных;
  оператор_3_при_всех_ложных;

}

Все управляющие выражения вычисляются по очереди. Если какое-либо выражение истинно, то выполняется соответствующая ветвь, а все остальные управляющие выражения и соответствующие блоки операторов пропускаются. Если все выражения ложны, то выполняется ветвь else (если таковая имеется). Присутствие блока else не обязательно, но он никогда не помешает. В программе может быть столько ветвей elsif, сколько вам необходимо.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru