Какие красивые трюки и изящные приёмы, помогающие в написании кода, вы знаете? Только без фанатизма, давайте такие, на понимание которых требуется не больше секунды. Ну ладно, не больше пяти-десяти секунд в запущенных случаях.
Я начну.
При начальном
n >= 0 цикл выполнится
n раз, уменьшая
nwhile ( n --> 0 )<br>
{ use(n); }<br>
Словарь как сокращённый switch
result = {<br>
1: 'I',<br>
5: 'V',<br>
10: 'X',<br>
}.get(input, 'default value')<br><br>
# некоторые доводят до<br>
['no', 'yes'][boolean_condition]<br>
# но это уже зло<br>
Двойное отрицание как приведение к bool
> [0, 1, !!0, !!1]<br>
[ 0, 1, false, true ]<br>
// полезность данного трюка спорная, по-моему, лучше явно приводить<br>
marklarius напомнил про старый добрый обмен значений тройным xor
a ^= b, b ^= a, a ^= b;<br>
А
Mezomish рассказал, что нельзя сокращать это до
a ^= b ^= a ^= b;<br>
потому что значение переменной меняется дважды в пределах одного выражения.
Унарный «+» как приведение к числу для языков с «волшебным» автоматическим преобразованием чисел в строки и обратно (Perl, PHP, JavaScript)
+"10" == 10<br>
Осторожно! Поведение оператора отличается от parseFloat и тем более от parseInt (JavaScript), следует использовать его только в тех случаях, когда вы ожидаете от аргумента только число, возможно, в строке, но всё остальное можно счесть за ошибку. Пример:
+'1cm' == NaN
, но
parseFloat('1cm') == 1
.
Можно применять «+» и к другим сущностям (спасибо
creage):
+ new Date() // миллисекунды с начала Эпохи<br>
Aquahawk показал минипаттерн — аналог return для блока кода
do {<br>
...<br>
if (some condition) {<br>
result = some_value;<br>
break;<br>
}<br>
...<br>
} while(false);<br>
OlegTar напомнил о замечательном свойстве логических операций во многих языках: правый аргумент не вычисляется, если по первому уже всё ясно. Таким образом, можно использовать
and (
&&) в качестве
if, а
or (
||) вместо
if not.
# остановится на первом неудачном шаге<br>
( doFirstStep() and<br>
doSecondStep() == 'ok' and<br>
doThirdStep() == 0 and<br>
sendReport() )<br><br>
# знаменитая шутка любителей Perl<br>
use Perl or die();<br>
Кроме того, в некоторых языках (Python, JavaScript) результирующее значение равно последнему вычисленному операнду.
# значение по умолчанию<br>
x = x or -273;<br><br>
# первая непустая строка<br>
'Mr. ' + (firstname or lastname or nickname)<br>