LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Все примеры «в пользу» питона на самом деле имеют прямой control flow без сюрпризов. Это либо линейное исполнение для цепочки методов, либо произвольное (не влияющее на результат) исполнение для математических операций. И т.п.

Во всех случаях, когда есть ветвления и циклы, последовательность записи должна по возможности точно и чётко отражать суть дела.

А так и в Ruby можно писать:

return f(x,y) if x<y
return f(y,x)

И это безобразие к сожалению даже попало в руководства по стилю и линтеры.

Всё это как раз делается ради «красоты» и «привычности чтения непрограммистом», а реальной пользы для написания ПО — ноль, либо отрицательная. Ну нету в формальном тексте интонации, чтобы показать инверсию или наличие эллипсиса.

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

Это полностью ломает автоматику/моторику чтения императивного кода, когда у нас слева отступами и ключевыми словами в начале строк показана суть дела, то есть control flow, а далее за ними идут детали в виде выражений.

Даже в случае когда для управления исполнением применяются || и &&, обычно в пределах одной строки есть либо И, либо ИЛИ, но не оба. Потому что разбирать получившееся не очень-то приятно даже с расставленными скобками. Здесь идея о чёткой записи ветвлений тоже не нарушатся. Хотя в случае нетривиальных ветвлений, выполненных на булевых операциях, стоит тоже давать по рукам.

инфиксное лучше, чем префиксное

Так дойдём до маразма и будем весь код в инфиксной записи писать. %)

for(int i = 0; i < a.size()-offset; ++i)

Это тоже, мягко говоря, нетривиальная конструкция. Студентов специально приходится учить её читать и понимать. Но даже здесь логика чтения практически не нарушается. Сначала инициализация. Затем проверка условия. Третья часть в самом конце. Тело цикло логически расположено перед третьей частью, а физически после. Это да, есть такое.

Исправление wandrien, :

Все примеры «в пользу» питона на самом деле имеют прямой control flow без сюрпризов. Это либо линейное исполнение для цепочки методов, либо произвольное (не влияющее на результат) исполнение для математических операций. И т.п.

Во всех случаях, когда есть ветвления и циклы, последовательность записи должна по возможности точно и чётко отражать суть дела.

А так и в Ruby можно писать:

return f(x,y) if x<y
return f(y,x)

И это безобразие к сожалению даже попало в руководства по стилю и линтеры.

Всё это как раз делается ради «красоты» и «привычности чтения непрограммистом», а реальной пользы для написания ПО — ноль, либо отрицательная.

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

Это полностью ломает автоматику/моторику чтения императивного кода, когда у нас слева отступами и ключевыми словами в начале строк показана суть дела, то есть control flow, а далее за ними идут детали в виде выражений.

Даже в случае когда для управления исполнением применяются || и &&, обычно в пределах одной строки есть либо И, либо ИЛИ, но не оба. Потому что разбирать получившееся не очень-то приятно даже с расставленными скобками. Здесь идея о чёткой записи ветвлений тоже не нарушатся. Хотя в случае нетривиальных ветвлений, выполненных на булевых операциях, стоит тоже давать по рукам.

инфиксное лучше, чем префиксное

Так дойдём до маразма и будем весь код в инфиксной записи писать. %)

for(int i = 0; i < a.size()-offset; ++i)

Это тоже, мягко говоря, нетривиальная конструкция. Студентов специально приходится учить её читать и понимать. Но даже здесь логика чтения практически не нарушается. Сначала инициализация. Затем проверка условия. Третья часть в самом конце. Тело цикло логически расположено перед третьей частью, а физически после. Это да, есть такое.

Исправление wandrien, :

Все примеры «в пользу» питона на самом деле имеют прямой control flow без сюрпризов. Это либо линейное исполнение для цепочки методов, либо произвольное (не влияющее на результат) исполнение для математических операций. И т.п.

Во всех случаях, когда есть ветвления и циклы, последовательность записи должна по возможности точно и чётко отражать суть дела.

А так и в Ruby можно писать:

return f(x,y) if x<y
return f(y,x)

И это безобразие к сожалению даже попало в руководства по стилю и линтеры.

Всё это как раз делается ради «красоты» и «привычности чтения непрограммистом», а реальной пользы для написания ПО — ноль, либо отрицательная.

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

Это полностью ломает автоматику/моторику чтения императивного кода, когда у нас слева отступами и ключевыми словами в начале строк показана суть дела, то есть control flow, а далее за ними идут детали в виде выражений.

Даже в случае когда для управления исполнением применяются || и &&, обычно в пределах одной строки есть либо И, либо ИЛИ, но не оба. Потому что разбирать получившееся не очень-то приятно даже с расставленными скобками. Здесь идея о чёткой записи ветвлений тоже не нарушатся. Хотя в случае нетривиальных ветвлений, выполненных на булевых операциях, стоит тоже давать по рукам.

инфиксное лучше, чем префиксное

Ну давайте дойдём до маразма и будем весь код в инфиксной записи писать.

for(int i = 0; i < a.size()-offset; ++i)

Это тоже, мягко говоря, нетривиальная конструкция. Студентов специально приходится учить её читать и понимать. Но даже здесь логика чтения практически не нарушается. Сначала инициализация. Затем проверка условия. Третья часть в самом конце. Тело цикло логически расположено перед третьей частью, а физически после. Это да, есть такое.

Исправление wandrien, :

Все примеры «в пользу» питона на самом деле имеют прямой control flow без сюрпризов. Это либо линейное исполнение для цепочки методов, либо произвольное (не влияющее на результат) исполнение для математических операций. И т.п.

Во всех случаях, когда есть ветвления и циклы, последовательность записи должна по возможности точно и чётко отражать суть дела.

А так и в Ruby можно писать:

return f(x,y) if x<y
return f(y,x)

И это безобразие к сожалению даже попало в руководства по стилю и линтеры.

Всё это как раз делается ради «красоты» и «привычности чтения непрограммистом», а реальной пользы для написания ПО — ноль, либо отрицательная.

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

Это полностью ломает автоматику/моторику чтения императивного кода, когда у нас слева отступами и ключевыми словами в начале строк показана суть дела, то есть control flow, а далее за ними идут детали в виде выражений.

Даже в случае когда для управления исполнением применяются || и &&, обычно в пределах одной строки есть либо И, либо ИЛИ, но не оба. Потому что разбирать получившееся не очень-то приятно даже с расставленными скобками. Здесь идея о чёткой записи ветвлений тоже не нарушатся. Хотя в случае нетривиальных ветвлений, выполненых на операторах, стоит тоже давать по рукам.

инфиксное лучше, чем префиксное

Ну давайте дойдём до маразма и будем весь код в инфиксной записи писать.

for(int i = 0; i < a.size()-offset; ++i)

Это тоже, мягко говоря, нетривиальная конструкция. Студентов специально приходится учить её читать и понимать. Но даже здесь логика чтения практически не нарушается. Сначала инициализация. Затем проверка условия. Третья часть в самом конце. Тело цикло логически расположено перед третьей частью, а физически после. Это да, есть такое.

Исходная версия wandrien, :

Все примеры «в пользу» питона на самом деле имеют прямой control flow без сюрпризов. Это либо линейное исполнение для цепочки методов, либо произвольное (не влияющее на результат) исполнение для математических операций. И т.п.

Во всех случаях, когда есть ветвления и циклы, последовательность записи должна по возможности точно и чётко отражать суть дела.

А так и в Ruby можно писать:

return f(x,y) if x<y
return f(y,x)

И это безобразие к сожалению даже попало в руководства по стилю и линтеры.

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

Это полностью ломает автоматику/моторику чтения императивного кода, когда у нас слева отступами и ключевыми словами в начале строк показана суть дела, то есть control flow, а далее за ними идут детали в виде выражений.

Даже в случае когда для управления исполнением применяются || и &&, обычно в пределах одной строки есть либо И, либо ИЛИ, но не оба. Потому что разбирать получившееся не очень-то приятно даже с расставленными скобками. Здесь идея о чёткой записи ветвлений тоже не нарушатся. Хотя в случае нетривиальных ветвлений, выполненых на операторах, стоит тоже давать по рукам.

инфиксное лучше, чем префиксное

Ну давайте дойдём до маразма и будем весь код в инфиксной записи писать.

for(int i = 0; i < a.size()-offset; ++i)

Это тоже, мягко говоря, нетривиальная конструкция. Студентов специально приходится учить её читать и понимать. Но даже здесь логика чтения практически не нарушается. Сначала инициализация. Затем проверка условия. Третья часть в самом конце. Тело цикло логически расположено перед третьей частью, а физически после. Это да, есть такое.