Re[11]: семантика switch/case
От: xobotik Россия  
Дата: 16.12.15 13:04
Оценка:
Здравствуйте, T4r4sB, Вы писали:

X>> А как тогда реализовать спуск вниз через case'ы?


TB>Действительно, раз томсон и ричи реализовали этот спуск именно так, то это значит, что никаких иных способов в приниципе существовать не может и никто до иных способов никогда не смог бы додуматься


А кто говорит, что в принципе иных способов не может и никто до иных способов никогда не смог бы додуматься?
С уважением!
Re[8]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:05
Оценка: +2
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, _hum_, Вы писали:


__>> если написано if(a > 0) then print("positive integer"), то даже человек, первый раз читающий эту конструкцию, догадается ...


BFE>что ось абсцисс направлена влево.

BFE>И это вы называете естественным?

юмор оценил

а если уж дотошничать, то это алгебраическая запись, а не геометрическая — спросите у школьников, как записывается условие, число больше нуля, они вам скажут, что именно так, а не (0 < a) "нуль меньше числа"
Re[12]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:08
Оценка:
Здравствуйте, xobotik, Вы писали:

X>Здравствуйте, _hum_, Вы писали:


__>>но в си оказалось, что эта конструкция закреплена за совсем другой семантикой. вот и высказываю свое удивление и недовольство


X>Вы скорее всего выразили отсутствие знаний в этом вопросе. То что Вы не знаете не является не очевидным.


X>Для меня человеческая семантика:

X>
X>swicth(a) {
X>    case 1: x = 1001; break;
X>    case 2: x = 4002; break;
X>};
X>


речь шла о человечности семантики для случая без break
Re[13]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:09
Оценка: +1
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, xobotik, Вы писали:


X>>Для меня человеческая семантика:


TB>Крестодеформация

Re[12]: семантика switch/case
От: T4r4sB Россия  
Дата: 16.12.15 13:12
Оценка: +1
Здравствуйте, xobotik, Вы писали:

X>Здравствуйте, T4r4sB, Вы писали:


X>>> А как тогда реализовать спуск вниз через case'ы?


TB>>Действительно, раз томсон и ричи реализовали этот спуск именно так, то это значит, что никаких иных способов в приниципе существовать не может и никто до иных способов никогда не смог бы додуматься


X>А кто говорит, что в принципе иных способов не может и никто до иных способов никогда не смог бы додуматься?


Ну тогда я не понимаю смысла задавать такие вопросы, "а как иначе реализовать". Неужели сходу не придумать 100500 вариантов? Да как угодно, явным словом continue, явным словом goto metka, или ещё каким явным словом, очевидно же, что такой случай более редкий, и значит именно в этом более редком случае и надо заставлять писать какое-нибудь слово.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[13]: семантика switch/case
От: xobotik Россия  
Дата: 16.12.15 13:16
Оценка: +1
Здравствуйте, _hum_, Вы писали:

__>речь шла о человечности семантики для случая без break


Не в той ветке форума написали, в Философию программирования надо было

Вы как-то не правильно немного рассуждаете, берете свое субъективное мнение, проецируете на всех людей и убеждаете меня
в том, что ваша человеческая семантика, более человечная или исключительно человечная. Которая причем существует исключительно
в вашем воображении и реальных компиляторов поддерживающих "Вашу человеческую семантику" нет.
С уважением!
Отредактировано 16.12.2015 13:27 xobotik . Предыдущая версия .
Re: семантика switch/case
От: ononim  
Дата: 16.12.15 13:17
Оценка: 1 (1) +2 -1
__>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/...
А зачем switch-у семантика как у if-ов если она уже есть у if-ов?
Я кстати хотя Duff's device'ом в реальной жизни не пользовался но такие строчки:

switch (var)
{
case VALUE1: DoSomethingFor1();
case VALUE2: DoSomethingFor1And2();
    break;

case VALUE3: DoSomethingFor3();
default: DoSomethingFor3AndEverythingElse();
}


Пишу частенько.
Как много веселых ребят, и все делают велосипед...
Отредактировано 16.12.2015 13:21 ononim . Предыдущая версия .
Re[13]: семантика switch/case
От: xobotik Россия  
Дата: 16.12.15 13:18
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Ну тогда я не понимаю смысла задавать такие вопросы, "а как иначе реализовать". Неужели сходу не придумать 100500 вариантов? Да как угодно, явным словом continue, явным словом goto metka, или ещё каким явным словом, очевидно же, что такой случай более редкий, и значит именно в этом более редком случае и надо заставлять писать какое-нибудь слово.


100500 вариантов работающих вариантов, на реальном компиляторе? Или вы про абстрактный компилятор в сферическом вакууме ?
С уважением!
Re[2]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:19
Оценка: +1
Здравствуйте, ononim, Вы писали:

O>Здравствуйте, _hum_, Вы писали:


__>>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/...

O>А зачем switch-у семантика как у if-ов если она уже есть у if-ов?

затем же, зачем есть три конструкции для организации цикла — для более экспрессивного задания алгоритма.
Re[3]: семантика switch/case
От: ononim  
Дата: 16.12.15 13:23
Оценка: +1
O>>Здравствуйте, _hum_, Вы писали:
__>>>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/...
O>>А зачем switch-у семантика как у if-ов если она уже есть у if-ов?
__>затем же, зачем есть три конструкции для организации цикла — для более экспрессивного задания алгоритма.
ну, скажем for имеет совсем-совсем не такую семантику как while. И в каком-то особенно философском смысле for отличается от while как switch от if/else. Я кстати пред сообщение подкрепил примером.
Как много веселых ребят, и все делают велосипед...
Отредактировано 16.12.2015 13:24 ononim . Предыдущая версия .
Re[9]: семантика switch/case
От: B0FEE664  
Дата: 16.12.15 13:26
Оценка:
Здравствуйте, _hum_, Вы писали:

__>юмор оценил



__>а если уж дотошничать, то это алгебраическая запись, а не геометрическая — спросите у школьников, как записывается условие, число больше нуля, они вам скажут, что именно так, а не (0 < a) "нуль меньше числа"

Программирование — это не математика. Например, манера ставить ноль слева от сравнения два раза меня спасала от ошибки.
А выражение if(0 < a) можно прочитать, как "если ноль слева от a..."

  на всякий случай, а то ещё скажите, что не видели:
do {
    if ( data == &array[o1])
    {
        operation = O1;
        break;
    }
    if ( data == &array[o2])
    {
        operation = O2;
        break;
    }
    ...
    if ( data == &array[on])
    {
        mOperation = ON;
        break;
    }
}
while(false);


PS Think different: if blue is the sky...
И каждый день — без права на ошибку...
Re[14]: семантика switch/case
От: T4r4sB Россия  
Дата: 16.12.15 13:29
Оценка:
Здравствуйте, xobotik, Вы писали:

X>100500 вариантов работающих вариантов, на реальном компиляторе? Или вы про абстрактный компилятор в сферическом вакууме ?


Причём тут реализованные варианты, ты спрашивал про то, как иначе реализовать протекание, если сделать выход-по-умолчанию.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[10]: семантика switch/case
От: T4r4sB Россия  
Дата: 16.12.15 13:31
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>на всякий случай, а то ещё скажите, что не видели:


Человека в детстве запугала учительница в школе, что если он будет использовать goto, то она его будет бить линейкой по пальцам, а если её не будет, то ему откусит голову велоцираптор. Школу он законил, учительницы, бьющей по пальцам, уже нет, но психическая травма осталась на всю жизнь, поэтому он и делает такие "циклы".
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:33
Оценка:
Здравствуйте, ononim, Вы писали:

O>>>Здравствуйте, _hum_, Вы писали:

__>>>>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/...
O>>>А зачем switch-у семантика как у if-ов если она уже есть у if-ов?
__>>затем же, зачем есть три конструкции для организации цикла — для более экспрессивного задания алгоритма.
O>ну, скажем for имеет совсем-совсем не такую семантику как while. И в каком-то особенно философском смысле for отличается от while как switch от if/else.

вот и я так ожидал, что "for отличается от while как switch от if/else", то есть, что первое является разновидностью синтаксического сахара второго (ведь for(<stat>_0; <condition>; <stat>_1){<body>} равносильно <stat>_0; while(<condition>){<body>; <stat>_1} ), а оказалось все не так

O>Я кстати пред сообщение подкрепил примером.


ну, как бы да, для меня это пример из области программирования на "высокоуровневом ассемблере".
Re: семантика switch/case
От: AlexRK  
Дата: 16.12.15 13:41
Оценка: +1 -1
Здравствуйте, _hum_, Вы писали:

__>зачем такая неочевидная и "техническая" семантика?


Язык Ц криво спроектирован, вот и все.

Там еще есть всякие дебильные штуки, типа эквивалентности a[i] и i[a].
Re[10]: семантика switch/case
От: _hum_ Беларусь  
Дата: 16.12.15 13:44
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, _hum_, Вы писали:


__>>юмор оценил

BFE>

__>>а если уж дотошничать, то это алгебраическая запись, а не геометрическая — спросите у школьников, как записывается условие, число больше нуля, они вам скажут, что именно так, а не (0 < a) "нуль меньше числа"

BFE>Программирование — это не математика. Например, манера ставить ноль слева от сравнения два раза меня спасала от ошибки.

речь про естественность текста для чтения, а не про "ошибкоустойчивость" я в курсе про эту защиту (но я ее применяю только для сравнения, где вместо "==" легко может появиться "=")

BFE>А выражение if(0 < a) можно прочитать, как "если ноль слева от a..."


так тоже редко говорят, когда имеют в виду положительность числа

BFE>на всякий случай, а то ещё скажите, что не видели:


это я совсем не понял, к чему вы привели. что за жах?
Re[15]: семантика switch/case
От: xobotik Россия  
Дата: 16.12.15 13:45
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Здравствуйте, xobotik, Вы писали:


X>>100500 вариантов работающих вариантов, на реальном компиляторе? Или вы про абстрактный компилятор в сферическом вакууме ?


TB>Причём тут реализованные варианты, ты спрашивал про то, как иначе реализовать протекание, если сделать выход-по-умолчанию.


Я просто не понял о чем Вы, теперь понял.
P.S. Для бурных фантазий есть же "Философия программирования".
С уважением!
Re[4]: семантика switch/case
От: Mr.Delphist  
Дата: 16.12.15 14:00
Оценка: +1
Здравствуйте, T4r4sB, Вы писали:

TB>Если в мане будет написано "ехать на лошади стоя очень просто — надо лишь не падать вперёд, назад, вправо и влево",

Под микроконтроллеры примерно так и пишут: памяти N мегабайт, эксепшны недоступны, длительность прерывания не более X тактов. И ничего, живут же люди.

TB>то это не значит, что заставлять людей ездить на лошадях стоя — это нормально.

То это значит, что в случае постоянных падений с лошади надо лишь выбрать другой язык программирования
Re: семантика switch/case
От: xobotik Россия  
Дата: 16.12.15 14:12
Оценка:
Здравствуйте, _hum_, Вы писали:

__>Всегда полагал, что семантика switch/case/case/... аналогична if/if/if/... без break-а и if/else if/else if/... c break-ом. А тут решил не ставить break "в конце ветки выбора", и опля — сюрприз. Так что, товарищи, кто еще так же, как и я, заблуждался, будьте внимательны:

__>
__>switch(1) 
__>{
__>    case 1 : cout << '1'; // prints "1",
__>    case 2 : cout << '2'; // then prints "2"
__>}
__>

__>
__>switch(1) 
__>{
__>    case 1 : cout << '1'; break; // prints "1" and exits the switch
__>    case 2 : cout << '2'; break;        
__>}
__>


__>p.s. Вопрос к знатокам — зачем такая неочевидная и "техническая" семантика?


Пользуйся раз тебе не удобно:
#define SCASE_CONTINUE(x) case x:
#define SCASE(x, func) case x: func(); break
#define SCASEARG(x, func) case x: func(x); break
#define SDEFAULT() default: break

// example
void printX() {
    std::cout << "in god we trust!" << std::endl; // C++
}
void printArg(int arg) {
    std::cout << std::to_string(arg) << std::endl; // C++
}
int main() {
    int x = 1;
    switch (x) {
        SCASE_CONTINUE(1);
        SCASE_CONTINUE(2);
        SCASE_CONTINUE(3);
        SCASE(4, printX);
        SCASE(5, printX);
        SCASEARG(10, printArg);
        SDEFAULT();
    }
}

Переписать, что на C++ и на C взлетит =)
P.S. Если честно, то это 3.14здец.
С уважением!
Отредактировано 16.12.2015 14:25 xobotik . Предыдущая версия .
Re[11]: семантика switch/case
От: B0FEE664  
Дата: 16.12.15 14:13
Оценка:
Здравствуйте, _hum_, Вы писали:

BFE>>на всякий случай, а то ещё скажите, что не видели:

__>это я совсем не понял, к чему вы привели. что за жах?

Если на него посмотреть, то можно предположить, почему switch-case такой, какой он есть. — это с одной стороны.
С другой стороны, именно такого switch'а в C нет из-за не константности в правой части сравнения.
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.