в плюс к расширению синтаксиса switch+for/while

Виталий Protasov
Виталий Protasov

Часто приходится писать циклы с вложенными переключателями кейсов состояний.

Пример какая нить игровая логика или игровой ии (множество состояний) имеющих неочевидные связи, которые легко описывать такими вот автоматами состояний, иногда связи запутанные и надо прыгать goto с кучей меток, а можно что-то вроде введения ключевых слов помимпо break и continue которые используется switchem для backward compatibility можно добавить нового сахорка:

 

1. слова break и continue перестают действовать для внешнего for/while с вложеным свитчем, можно добавить: skip/end,

Вызывая при каком-то условие в кейсе, skip будет аналогом вызова continue для внешнего for/while прерывающий возможно проваливающийся код кейса switch, и слово end (тоже что поставить метку за циклом) и позвать при каком-то условии или в каком-то кейсе, аналог break для for/while если надо в кейсе switch'а сломать внешний цикл либо скипнуть шаг без применения меткок или флагов. для самих циклов кстати словом skip (uinsigned int) можно было бы пропускать итерации где итераторы или инкрементирующиеся переменные бы получали смещение пропущенных шагов инстантно если цифра, либо с симуляцией блока видимости до вызова skip пошагово ()

for ( auto i(0); i < 10; i++ ) {
 ...
   if( some ) // use just skip 4; for instant or skip (4) for simul steps run until skip call
      i += 4;

}

2. слово jump (case_no) позволяет вернуться из кейса уровнем больше в меньший (назад) или с пропуском (вперед)

3. слово move убрало бы без флагов/меток/изощрений слова break на пути кейсов от->до, сделав кейс проваливающимся например из 1 ого вызов move 4 прошло бы последовательно по 2,3,4 убрав их внешний break; возможно сделать и обратный ход 4->3->2 сложно придумать зачем, словом back( case_no ) но явно проще чем симулировать такое поведение метками и goto.

4. слово repeat позволяет зайти в блок видимости до кейсов если там какие-то флаги получаемые вызовами или кто его знает что там может быть 

switch ( ... ) { 
  /* block */  
   case x: { if (some) repeat; ...  }
   ...
}

5. слово up; позволяет на том-же шаге цикла вернуться в блок видимости (начало исполниения цикла) т.е. до самого swith, даже если их пяток лежит там, опять таки перевычислить какие-то флаги другие свитчи, ещё что-то прим. (саму стейт переменную)

for ( ... ) { /* block */ switch(...) {} }

 

Пока расписал идею подумал (просто нет проверить под рукой)

может я придумал какой-то байан и управлять внешними циклами из свитчей можно как-то просто и лаконично.

Помнится в 2000 видел где-то в циклах/циклов сишного кода ядра линукса некие странные обозначения continue (3); break (2); не мог понять что значило, вроде бы индекс обозначал на каком уровне вложенности надо применять ключевик.

 

-6
рейтинг
Нет комментариев
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения