Уроки Tcl

Начало Уроки Tk Файлы
Статьи Уроки Tcl Гостевая книга
Предыдущий урок - #06: Математические вычисления - expr

#07: Текстовое сравнение - switch

Когда вы пишите программу, иногда требуется выполнить какие-нибудь команды в зависимости от содержимого переменной. Одна из команд, которую можно использовать для выбора это switch.

Команда switch позволяет выбрать один из нескольких вариантов выполнения на основе значения строки. Строка сравнивается с набором образцов, и когда совпадёт, выполняется соответствующий участок кода.

Синтакс комманды следующий:

switch строка образец1 команда1 ?образец2? ?команда2? ... образецN командаN

- или -

switch строка { образец1 команда1 ?образец2? ?команда2? ... образецN командаN}

Строка это строка, которую вы хотите сравнивать с образцами, и образец1 - первый образец, с которым она будет сравниваться. Если строка совпадает с образцом1, то будет выполнена команда1, и значение которое она вернёт будет возвращено командой switch. Если образец1 не совпадает со строкой, тогда будет проверен образец2, и так далее...

Если последний образец - строка "default", то он будет соответствовать любой строке. Это гарантирует, что в любом случае какой-то участок кода будет выполнен.

Если аргумента default нет, и ни один из образцов не соответствует строке, то switch возвратит пустую строку.

Команда switch имеет два вида. Каждый образец и команда могут быть представлены как аргументы команды switch (первая форма), или они могут быть сгруппированы фигурными скобками в один аргумент. Если они сгруппированы, то команда switch сама разделяет на образцы и команды, но не производит подстановки в образцах.

Когда образец совпадает со строкой, соответствующая команда обрабатывается интерпретатором Tcl как отдельная строка кода. Если была группировка фигурными скобками, то при выполнении подстановка всё равно производится.

Выполните пример, попробуйте поменять значение, присвоенное x на ДВА и ТРИ, и выполнить пример снова.

Пример:

# Задание переменных, которые будут сравниваться
set x "ОДИН";
set y 1;
set z "ОДИН";


# Можно записать так
switch $x "ОДИН" "puts ОДИН=1" "ДВА" "puts ДВА=2" "default" "puts НЕТ_СОВПАДЕНИЙ"

# Так читать удобнее, образцы слева, а соответствующие команды справа
switch $x \
  "ОДИН" 	"puts ОДИН=1"  \
  "ДВА" 	"puts ДВА=2" \
  "default" 	"puts НЕТ_СОВПАДЕНИЙ";

# Эти два примера показывают разницу в использовании switch
# с фигурными скобками и без
# Посмотрите, команда switch может быть слишком сложна, чтобы записать
# её в одну строку

# Эта форма позволяет подстановки в образцах

switch $x \
  "$z"		{set y1 [expr $y+1]; puts "СОВПАДЕНИЕ \$z. $y + $z is $y1" } \
  "ОДИН"	{set y1 [expr $y+1]; puts "СОВПАДЕНИЕ ОДИН. $y + один это $y1"} \
  "ДВА"		{set y1 [expr $y+2]; puts "СОВПАДЕНИЕ ДВА. $y + два это $y1" } \
  "ТРИ"		{set y1 [expr $y+3]; puts "СОВПАДЕНИЕ ТРИ. $y + три это $y1" } \
  "default"	{puts "$x не совпало ни с одним вариантом";}

# Эта форма не позволяет интерпретатору делать подстановки

switch $x {
  "$z"		{set y1 [expr $y+1]; puts "СОВПАДЕНИЕ \$z. $y + $z is $y1" }
  "ОДИН"	{set y1 [expr $y+1]; puts "СОВПАДЕНИЕ ОДИН. $y + один это $y1"}
  "ДВА"		{set y1 [expr $y+2]; puts "СОВПАДЕНИЕ ДВА. $y + два это $y1"}
  "ТРИ"		{set y1 [expr $y+3]; puts "СОВПАДЕНИЕ ТРИ. $y + три это $y1"}
  "default"	{puts "$x не совпало ни с одним вариантом"}
}

Следующий урок - #08: Сравнение чисел - if
Горбачев "Yurez" Юрий  
Хостинг от uCoz