Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Прочее

Переключатель

Переключатель можно считать разновидностью условного выражения, которая в некоторых случаях удобнее обычного условного выражения. Чем они отличаются?

  • В переключателе проверяется только один объект, который сопоставляется с чем-то другим.
  • Производится проверка этого объекта на равенство (только равенство!) ещё какому-то объекту.
  • После заголовка переключателя перечисляются возможные значения, которые может принимать объект.
        Т.е. переключатель — это условный оператор, который «специализируется» на проверке одного единственного объекта (и только его) на равенство (и только равенство) некоторому набору значений. Исключать его из арсенала инструментов будущего языка программирования не стоит.

        Оператор «switch» в C/C++ выглядит примерно так:
switch (проверяемый на равенство объект)
{  case вариант значения 1:
	операторы
     break;
   case вариант значения 2:
	операторы
     break;
   case вариант значения 3:
   case вариант значения 4:
	операторы
     break;
   default:
	операторы
}
        Преписываем в своём скобочном стиле:
(switch проверяемый на равенство объект
   case вариант значения 1
	операторы
   case вариант значения 2
	операторы
   case {вариант значения 3, вариант значения 4} // не одно значение, а множество
	операторы
   default
	операторы)
            IDE нарисует тот синтаксический сахар, который мы старательно удалили. Внимательные читатели могут заметить, что код на Си может быть таким:
switch (проверяемый на равенство объект)
{  case вариант значения 1:
	операторы
   case вариант значения 2:
	операторы
     break;
   case вариант значения 3:
	операторы
}
            Мы видим, что оператор «break» может отсутствать между ветвями «case». Т.е. после выполнения одной ветви «case» выполняется идущая ниже. Ничего хорошего в этом нет. Это провоцирует появление «спагетти-кода». Такую возможность следует исключить так же безжалостно, как и в случае с «goto». Поэтому одна ветвь «case» должна заканчиваться, когда начинается следующая. А теперь подводим итог, изобразив наши идеи в «симметричном скобочном» стиле.

(       switch проверяемый на равенство объект  
 
      case вариант значения 1  
  операторы  
      case вариант значения 2  
  операторы  
      case { вариант значения 3, вариант значения 4 }  
  операторы
 
         default // Может «default» заменить на «else»? Экономия...  
  операторы для всех остальных случаев )

Последняя правка: 2014-12-20    13:48

ОценитеОценки посетителей
   ██████████████████████████████████████████ 2 (100%)
   ▌ 0
   ▌ 0
   ▌ 0

Отзывы

     2014/12/22 13:20, Сергей

А как бы выбиратель (переключатель) выглядел бы с русскими служебными словами?

     2014/12/23 03:32, Автор сайта

В языке «Эль-76» в этом случае писали «выбор» — «из».

     2015/04/10 02:01, misha_shar53

Синтаксис переключателя взят от Си, а содержание от Паскаль. Это сбивает с толку. Надо тогда и синтаксис брать Паскаля. Он, по-моему, более лаконичный.
Синтаксис Паскаля:
case NUM of
1,2,3: writeln (‘Первый квартал’);
4,5,6: writeln (‘Второй квартал’);
7,8,9: writeln (‘Третий квартал’);
10,11,12: writeln (‘Четвертый квартал’)
else writeln (‘Вы неправильно указали месяц’)
end;
Возможно end заменить на скобку).

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Устарел ли текст как форма представления программы

Русский язык и программирование

Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

Некоторые «вкусности» Алгол-68

«Двухмерный» синтаксис Python

Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

Должна ли программа быть удобочитаемой?

Стиль языка программирования

Тексто-графическое представление программы

●  Разделители

●  Строки программы

●  Слева направо или справа налево?

Комментарии

●  Длинные комментарии

●  Короткие комментарии

●  Комментарии автоматической генерации документации

●  Нерабочий код

●  Помеченные комментарии

Нужны ли беззнаковые целые?

Шестнадцатиричные и двоичные константы

Условные операторы

Переключатель

Циклы

●  Продолжение цикла и выход из него

Некошерный «goto»

Изменение приоритетов операций

Операции присвоения и проверки на равенство. Возможно ли однаковое обозначение?

Так ли нужны операции «&&», «||» и «^^»?

Постфиксные инкремент и декремент

Почему в PHP для конкатенации строк используется «.»?

Указатели и ссылки в C++

Использование памяти

Почему динамическое распределение памяти — это плохо

Как обеспечить возврат функциями объектов переменной длины?

●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●  Массивы переменной длины в C/C++

●  Размещение объектов в стеке, традиционный подход

●  Размещение объектов переменной длины с использованием множества стеков

●  Размещение объектов переменной длины с использованием двух стеков

●  Реализация двухстековой модели размещения данных

●  Двухстековая модель: тесты на скорость

●  Изменение длины объекта в стеке во время исполнения

●  Размещение объектов переменной длины с использованием одного стека

Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

Безопасность и размещение объектов переменной длины в стеке

Массивы, структуры, типы, классы переменной длины

О хранении данных в стеке, вместо заключения

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Прочее

Последние комментарии

2018/12/08 23:03 ••• Попов Михаил
✎ Программирование без программистов — это медицина без врачей

2018/12/07 08:57 ••• Автор сайта
✎ Почему обречён язык Форт

2018/12/07 08:36 ••• Автор сайта
✎ Нужны ли беззнаковые целые?

2018/12/03 13:51 ••• kt
✎ Экстракоды при синтезе программ

2018/11/30 17:56 ••• Freeman
✎ Изменение приоритетов операций

2018/11/30 17:20 ••• Автор сайта
✎ Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

2018/11/26 14:23 ••• Автор сайта
✎ Так ли нужны операции «&&», «||» и «^^»?

2018/11/18 15:21 ••• Freeman
✎ Устарел ли текст как форма представления программы

2018/11/17 03:28 ••• Comdiv
✎ Изменение длины объекта в стеке во время исполнения

2018/11/16 12:53 ••• Автор сайта
✎ Помеченные комментарии

2018/11/11 14:01 ••• Александр Коновалов aka Маздайщик
✎ Нерабочий код

2018/11/11 13:39 ••• Александр Коновалов aka Маздайщик
✎ О русском языке в программировании