Информация об изменениях

Сообщение Re[7]: семантика switch/case от 16.12.2015 16:00

Изменено 16.12.2015 16:05 ononim

O>>фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
O>>
for (;;)

__>что, согласитесь, нельзя отнести к "совсем-совсем другой семантике" (по сравнению с while).
O>>что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)
__>а по мне, так while(true) более естественно выглядит, чем пустое условие в for (;)
Ну, если считать что бесконечный цикл — это такой цикл у которого нет условия выхода — то for(;) логичнее, ибо в нем реально нет условия выхода. А while(true) — это цикл с условием выхода, которое просто бесконечно не выполняется.


O>>Чтонить банальнохитрое типа:

O>>
bool get_fileext(char *dst, size_t len, const char *src)
O>>{    
O>>    for ( len = (src = strrchr(src, '.') ) ? len : 0; (len > 1 && !!(*dst=*src)); --len,++src,++dst);
O>>    *dst = 0;
O>>    return !*src;
O>>}

O>>..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.
__>это пример кода, который уважаемые люди рекомендуют никогда не писать, если только вы не собираетесь больше никогда его не сопровождать в дальнейшем.

Ну да, в отличии от многоэтажных кейсов так я почти никогда не пишу, только если очень тороплюсь
Re[7]: семантика switch/case
O>>фор в отличие от вайла допускает отсутствие любой своей части, вплоть до
O>>
for (;;)

__>что, согласитесь, нельзя отнести к "совсем-совсем другой семантике" (по сравнению с while).
O>>что кстати многие, включая меня, считают более адекватным выражением бесконечного цифра нежели while(1)
__>а по мне, так while(true) более естественно выглядит, чем пустое условие в for (;)
Ну, если считать что бесконечный цикл — это такой цикл у которого нет условия выхода — то for(;) логичнее, ибо в нем реально нет условия выхода. А while(true) — это цикл с условием выхода, которое просто бесконечно не выполняется.

Кстати отличия switch от if дае глубже чем просто проваливающиеся бряки. Бряков в нем может быть много, даже без проваливания:

switch (var)
{
    case 1:
        if(something1a()) break;
        if(something1b()) break;
        if(something1c()) break;
                something1();
        break;
    case 2:
        if(something2a()) break;
        if(something2b()) break;
        if(something2c()) break;
                something2();
        break;
}


O>>Чтонить банальнохитрое типа:

O>>
bool get_fileext(char *dst, size_t len, const char *src)
O>>{    
O>>    for ( len = (src = strrchr(src, '.') ) ? len : 0; (len > 1 && !!(*dst=*src)); --len,++src,++dst);
O>>    *dst = 0;
O>>    return !*src;
O>>}

O>>..с применением вайла будет выглядеть, примерно настолько же понятнее как многоэтажный switch-case переделанный на ифы. Но и настолько же длиннее.
__>это пример кода, который уважаемые люди рекомендуют никогда не писать, если только вы не собираетесь больше никогда его не сопровождать в дальнейшем.

Ну да, в отличии от многоэтажных кейсов так я почти никогда не пишу, только если очень тороплюсь