Стиль Erlang - случай по сравнению с функциональным сопоставлением с образцом

Это было бы полезно

button.titleLabel.font = [UIFont fontWithName:@"YOUR FONTNAME" size:12.0f]
19
задан Alan Moore 26 June 2009 в 19:48
поделиться

4 ответа

Второй способ является предпочтительным, особенно если вы можете сохранить предложения в одной строке:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse;
maybeCngStor(_,_)                      -> ignoreit.

Облегчает чтение и рассуждение. Всегда выбирайте тот стиль, который будет легче всего читать в будущем. Часто вы обнаруживаете набор предложений, где одно - это 10 строк, а остальные - только одна строка - разбейте длинный на функцию:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse();
maybeCngStor(_,_)                      -> ignoreit.

somethingelse() ->
   (...)
   Return.

Мелочи, такие как расположение предложений для их выравнивания и использование коротких имен переменных, имеют значение - но не попадайтесь в ловушку изменения всего на P, Q, R.

Хороший трюк, если вы много используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, имеет смысл, когда вы прыгаете с парашютом в функцию с высоты 10 000 футов в поисках жучка на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse;
maybeCngStor(_,_)                      -> ignoreit.

Облегчает чтение и рассуждение. Всегда выбирайте тот стиль, который будет легче всего читать в будущем. Часто вы обнаруживаете набор предложений, где одно - это 10 строк, а остальные - только одна строка - разбейте длинный на функцию:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse();
maybeCngStor(_,_)                      -> ignoreit.

somethingelse() ->
   (...)
   Return.

Мелочи, такие как расположение предложений для их выравнивания и использование коротких имен переменных, имеют значение - но не попадайтесь в ловушку изменения всего на P, Q, R.

Хороший трюк, если вы много используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеет смысл, когда вы прыгаете с парашютом в функцию с высоты 10 000 футов в поисках жучка на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse;
maybeCngStor(_,_)                      -> ignoreit.

Облегчает чтение и рассуждение. Всегда выбирайте тот стиль, который будет легче всего читать в будущем. Часто вы обнаруживаете набор предложений, где одно - это 10 строк, а остальные - только одна строка - разбейте длинный на функцию:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse();
maybeCngStor(_,_)                      -> ignoreit.

somethingelse() ->
   (...)
   Return.

Мелочи, такие как расположение предложений для их выравнивания и использование коротких имен переменных, имеют значение - но не попадайтесь в ловушку изменения всего на P, Q, R.

Хороший трюк, если вы много используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеет смысл, когда вы прыгаете с парашютом в функцию с высоты 10 000 футов в поисках жучка на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

Часто вы обнаруживаете набор предложений, где одно - это 10 строк, а остальные - только одна строка - разбейте длинный на функцию:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse();
maybeCngStor(_,_)                      -> ignoreit.

somethingelse() ->
   (...)
   Return.

Мелочи, такие как расположение предложений для их выравнивания и использование коротких имен переменных, имеют значение - но не попадайтесь в ловушку изменения всего на P, Q, R.

Хороший трюк, если вы много используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеет смысл, когда вы прыгаете с парашютом в функцию с высоты 10 000 футов в поисках жучка на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

Часто вы обнаруживаете набор предложений, где одно - это 10 строк, а остальные - только одна строка - разбейте длинный на функцию:

maybeCngStor(Sz, ets)  when Sz > 10000 -> something;
maybeCngStor(Sz, dets) when Sz < 10000 -> somethingelse();
maybeCngStor(_,_)                      -> ignoreit.

somethingelse() ->
   (...)
   Return.

Мелочи, такие как расположение предложений для их выравнивания и использование коротких имен переменных, имеют значение - но не попадайтесь в ловушку изменения всего на P, Q, R.

Хороший трюк, если вы много используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеет смысл, когда вы прыгаете с парашютом в функцию с высоты 10 000 футов в поисках жучка на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

Хороший трюк, если вы часто используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеют смысл, когда вы парашютируете в функцию с высоты 10 000 футов в поисках ошибки на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

Хороший трюк, если вы часто используете записи, - сопоставить записи с короткими переменными:

#record{foo = F, bar = B, baz = Bz} = Parameter

Это дает вам короткие имена переменных, которые имеют смысл, когда вы парашютируете в функцию с высоты 10 000 футов в поисках ошибки на следующее Рождество. F, очевидно, является Foo и т. Д. И т. Д.

14
ответ дан 30 November 2019 в 04:33
поделиться

You can make these examples more similar by doing:

case Type of
   ets  when Size > 10000 -> ...;
   dets when Size < 10000 -> ...;
   _ -> ...
end.

This seems to be clearer to me. The advantage of splitting this to a separate function is that you get to give it a name which acts as documentation and appears in stack traces. If that snippet is part of a larger function I'd separate it out, otherwise it's okay as is.

One thing worth considering is that error case as written the function will accept Type arguments other than ets/dets. Unless this is really what you want it's worth making this clause more restrictive.

3
ответ дан 30 November 2019 в 04:33
поделиться

As for me first style is more clear and may be faster. But it need test to say it exactly. In second case if type!=ets then both "Size > 10000" and "Size < 10000" would be evaluated.

0
ответ дан 30 November 2019 в 04:33
поделиться

(Поместите как ответ, чтобы получить форматирование кода ...!)

Одна вещь, которую я обнаружил, когда вносил некоторые изменения, это что этот подход может изменить короткое замыкание по умолчанию. Например,

case A > 10 of 
      true -> 
             case B > 10 of 
                  true -> dummy1; 
                  false -> dummy2 
             end; 
      false -> dummy3 
end 

должен всегда выполнять B> 10, если вы назовете его как

doTest(A > 10, B > 10) 

when

doTest(true, true) -> dummy1; 
doTest(true, false) -> dummy2; 
doTest(false, _) -> dummy3. 

, что иногда не то, что вам нужно!

0
ответ дан 30 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: