Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
def foobar():
if something:
do_1()
do_2()
for i in xrange(10):
do_4()
def foobar():
if not something:
return
do_1()
do_2()
for i in xrange(10):
do_4()
for i in xrange(10):
if something:
do_1()
do_2()
for i in xrange(10):
if not something:
continue
do_1()
do_2()
repeat ... until true и break внутри нее для замены отсутствующего goto, но это уже начало какой-то хрен-пойми-что-магии).if(cond1) if(cond2) {Так мы с этим согласны и ни в коем случае не оспариваем.
прекрасно записывается как
if(cond1 && cond2) {
for( a in obj ) if( obj.hasOwnProperty( a ) ){
do something
}
Это не опечатка, два if один за другим и без отступа!
Иногда избежать лесенки можно с помощью обращения условия
Ведь уменьшение на несколько отступов в глубокой лесенке очень помогает.
Если это форматирование не вызывает у вас дискомфорта, попробуйте пару раз, возможно вам это понравится.
Это как читать не по буквам, а целыми словами или иероглифами. То есть переход на следующий уровень восприятия.
if (a | b | c)
if (d | e)
for(цикл)
if (условие)
{
}
if (board_program == NULL)
return 1;
Я согласен, что возможно лучше написать в одну строчку, но тогда ставить точки останова на return становится сложнее.получите лишнюю проблему, о которой надо думатьНет, таких проблем не наблюдается. Когда вы пишете такую конструкцию, else нет, вы не пишете скобочки. Когда появляется else пишете скобочки. Проблем нет, никаких, абсолютно.
это ваше субъективное мнение«Субъективное», это ваше «отвратительно». А если объективно, то две-три однотипных строки визуально одна над другой читаются легче чем те же строки с отступами. Мне кажется «перфекционистский бунт» мешает вам мыслить объективно.
«Субъективное», это ваше «отвратительно»
А если объективно, то <...> читаются легче <...>
if (condition) return;
if (condition) return; в начале функции (именно поэтому — он является единственным исключением. так-как его основное назначение — убирать вложенность)function f1(){
if (условие){
for(цикл)
{
//....
}
}
//....
}
function f1(){
if (условие){
f2();
}
//....
function f2(){
//....
}
}
function f1(){
if (!условие) return;
f2();
//....
function f2(){
//....
}
}
if if for if. f2();
//....
function f2(){
//....
}function handleLine(obj) {
//console.log(obj);
switch (obj.type) {
case 'typedef':
return handleTypeDef(obj);
case 'typeof':
return handleTypeOf(obj);
default:
throw new Error('Строка начинается на что-то отличное от: typedef/typeof!');
}
function handleTypeDef(obj){
varHash[obj.rightVar] = evaluateShifts(obj);
}
function handleTypeOf(obj){
var expVal = evaluateShifts(obj);
console.log(getStringOfValue(expVal));
}
function evaluateShifts(obj) {
switch (obj.leftVar) {
case 'void':
return addShifts(obj.shift, 0);
case 'errtype':
return addShifts('errtype', 0);
default:
return addShifts(obj.shift, varHash[obj.leftVar]);
}
function addShifts(expressionShift, leftVariableShift){
if (leftVariableShift === 'errtype') {
return 'errtype';
}
if (expressionShift + leftVariableShift < 0) {
return 'errtype';
} else {
return expressionShift + leftVariableShift;
}
}
}
function getStringOfValue(val){
if (val === 'errtype') return 'errtype';
return 'void' + Array(val+1).join('*');
}
}
switch(opcode) {
case 1:
(node.childNodes.length === 0) ? node.appendChild(fragment) : node.insertBefore(node.firstChild, fragment);
break;
case 2:
var nodeparent = node.parentNode;
if (nodeparent)
nodeparent.insertBefore(fragment, node);
break;
case 3:
var nodeparent = node.parentNode;
if (nodeparent) {
var next_node = node.nextSibling;
if (next_node)
nodeparent.insertBefore(fragment, next_node);
else
nodeparent.appendChild(fragment);
}
break;
default:
node.appendChild(fragment);
}используйте flat только там, где это не повредит читаемости кода
Пара полезных исключений из правил по форматированию исходного кода