LINUX.ORG.RU

помогите написать красивый код


0

0

всем ДД!

вопрос по украшательству кода.
<<<
res1 = f1();
res2 = f2();
res3 = f3();
...
return res;
>>>

f1, f2, f3 могу возвращать только PASS/FAIL. как бы все это красаво обернуть, чтобы из функции возвращался PASS, только если все функции вернули PASS и FAIL в остальных случаях?

спасибо


Re: помогите написать красивый код

return f1() && f2() && f3();

?

dmitry_vk ★★★ ()

Re: помогите написать красивый код

>f1, f2, f3 могу возвращать только PASS/FAIL

PASS/FAIL это какого типа? строки? константы? enum? и какой язык вообще? =)

если результаты булевы, то все тривиально:

return f1() && f2() && f3();

nu11 ★★★★★ ()

Re: помогите написать красивый код

язык С. хотелось бы решение, в котором нет никаких предположений о значении PASS/FAIL (тип int).

mrrr ()
Ответ на: Re: помогите написать красивый код от lester

Re: помогите написать красивый код

ну тогда уже:

enum { NOERR, ERR1, ERR2, ERR3 };

int errno = NOERR;

if (f1() != NOERR)
         errno = ERR1;

if (f2() != NOERR)
         errno = ERR2;

if (f3() != NOERR)
         errno = ERR3;

return errno;

а то потом не разберёшся, где лагануло

beastie ★★★★★ ()
Ответ на: Re: помогите написать красивый код от lester

Re: помогите написать красивый код

>тогда не обязательно вызовутся f2() и f3()

зависит от компилятора и степени оптимизации. Но грабли таки возможны, это да. "Счастливой отладки, суки" (с)

nu11 ★★★★★ ()
Ответ на: Re: помогите написать красивый код от lester

Re: помогите написать красивый код

> или у меня парсер сломался, или вы утверждали обратное :)

Ты сказал, что f2() и f3() не обязательно будут вызваны... а я и добавил, что они не будут вызваны в том случае, если f1() будет false. Или я что-то не так понял? :-)

smh ★★★ ()
Ответ на: Re: помогите написать красивый код от smh

Re: помогите написать красивый код

> не обязательно вызовутся f2() и f3(), только в том случае, если f1() будет false.

так читается вместе, вообщем все понятно - хватит нам тут умничать :)

lester ★★★★ ()

Re: помогите написать красивый код

res1 = f1();
res2 = f2();
res3 = f3();
...
return res1 && res2 && res3;


> хотелось бы решение, в котором нет никаких предположений о значении PASS/FAIL (тип int).


Добавить три переменных наиболее прближенного к булеву типа и установить в соответствии со значением res1-3 в том месте, где троеточие. Возвращать их коньюкцию.

LamerOk ★★★★★ ()

Re: помогите написать красивый код

А почему нельзя f1() & f2() & f3() ? И аналог с переменной: res = f1(); res &= f2(); ...

Как разновидность (если не нравится битовая арифметика): fail = !f1(); fail |= !f2();

alexsaa ()

Re: помогите написать красивый код

int rv = PASS;
res1 = f1();
if (res1 != PASS) {
  rv = FAIL;
}
res2 = f2();
if (res2 != PASS) {
  rv = FAIL;
}
res3 = f3();
if (res3 != PASS) {
  rv = FAIL;
}
return rv;

Legioner ★★★★★ ()
Ответ на: Re: помогите написать красивый код от LamerOk

Re: помогите написать красивый код

>> А почему нельзя f1() & f2() & f3() ?

> man operator &

К сожалению, такой скупой ответ приемлем только при чётко поставленной задаче. Здесь же из постановки задачи не следует даже неприемлемость оператора && (это уже потом поясняется в треде отдельно). В общем, вопрос остаётся в силе.

alexsaa ()

Re: помогите написать красивый код

int conj (int ... values)
{
   for value in values
   {
       if (value==FAIL)
          return FAIL;
   }
   return PASS;
}


someFunc()
{
...
  int test_result = conj (test1(), test2(), test3(), test4());
...
}

savnn ()
Ответ на: Re: помогите написать красивый код от lester

Re: помогите написать красивый код

>res = true;
>res &= f1();

побитовые операции над логической константой? мрак...

ЗЫ: нафиг вообще красивый код? заказчик на него будет пялиться? красивый не всегда просто отлаживать.
имхо, красивый код - тот, который проще отлаживать.

xydo ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.