|
|
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Иногда сталкиваюсь с кодом, в котором разработчики не используют скобки, а выстраивают выражения используя приаритетность выполнения операторов. я вот на память эту приоритетность не помню, мне удобнее все оформлять скобками. Насколько использование приоритетности выполнения операторов прибавляет крутизны. По мне так просто создается плохочитаемый код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:20 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
George-III, наоборот, лишние скобки создают нечитаемый код. поэтому лишние скобки нужно убирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:42 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
"Некоторые разработчики думают, что мировой запас скобок жёстко ограничен, и их следует использовать только в самых необходимых случаях" (с) одна хорошая книга по программированию. 1. Не помните приоритетность - плохо. Равно можете не помнить правила дорожного движения, правила грамматики итд. 2. "Вам удобнее" и "Вам плохо читаемо" - это не аргумент. 3. Крутизна тут не при чём. 4. Нехватка скобок ухудшает читаемость кода. Избыток скобок ухудшает читаемость кода. Слишком длинные и сложные выражения, в том числе со скобками и в том числе без скобок, ухудшают читаемость кода. В любом случае важна адекватность и чувство меры. 5. Идеального кода в мире мало. Важным для программиста является умение разобраться в неидеальном коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:42 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
George-IIIя вот на память эту приоритетность не помню, мне удобнее все оформлять скобками. Если ты не знаешь язык программирования, на котором пишешь -- учи его. Приоритеты -- одна из составляющих языка программ. Во многих (в большинстве) ЯП приоритеты операций более-менее соответствуют приоритету аналогичных операций из математики и булевой алгебры. Учи математику и булеву алгебру, если ты ещё их не знаешь (хотя это совсем странно, 4 класс школы, если я не ошибаюсь, а булева -- нач. курс института, но на это я дам подсказку -- AND -- называют логическим умножением (& или && ), OR -- логическим сложением (| или ||), поэтому относительные приоритеты у этих операций такие же, как и у соотв. операций алгебры чисел -- у AND больше, у OR меньше. Запомнив эти другие названия этих операций ты всегда будешь помнить их приоритеты. Надо ещё запомнить, что логическое НЕ имеет самый большой приоритет (больше AND и OR), можно считать, что NOT -- это логический унарный минус (смена знака). А XOR используется достаточно редко, там можно и скобки поставить.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 15:55 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
softwarer"Некоторые разработчики думают, что мировой запас скобок жёстко ограничен, и их следует использовать только в самых необходимых случаях" (с) одна хорошая книга по программированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:04 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
MasterZivВо многих (в большинстве) ЯП приоритеты операций более-менее соответствуют приоритету аналогичных операций из математики и булевой алгебры. Проблемы с приоритетом идут как правило на стыке арифметических и логических операций. Ещё бывают вопросы с приоритетом сравнения, ну и изредка экзотика типа порядка выполнения 1 >> 2 >> 3. Вот за что не люблю си-подобные языки, так это как раз за кучу "лишних" скобок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:19 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
softwarerНе помните приоритетность - плохо. Равно можете не помнить правила дорожного движения, правила грамматики итд.Приоритетность в разных языках и даже диалектах разная. В отличие от ПДД. Я бы посмотрел, как бы ты помнил ПДД, будь они свои для каждой улицы... George-IIIНасколько использование приоритетности выполнения операторов прибавляет крутизны. По мне так просто создается плохочитаемый код. Для начала подели приоритетность на абсолютную и языкозависимую. Использование первой естественно. Использование второй - более чем сомнительное занятие. Код не только плохочитаем, но и может оказаться непереносимым. Например, в MS SQL приоритет XOR выше, чем у NOT, а в MySQL наоборот... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:22 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
AkinasoftwarerНе помните приоритетность - плохо. Равно можете не помнить правила дорожного движения, правила грамматики итд.Приоритетность в разных языках и даже диалектах разная. В отличие от ПДД. Я бы посмотрел, как бы ты помнил ПДД, будь они свои для каждой улицы... Я бы посмотрел, как ты программируешь на наборе языков, сравнимом с количеством улиц. ПДД свои для каждой страны, но особых проблем у меня не возникло. Просто перед пересечением границы стоит прочитать список "что там не так и как именно". При этом пересекать границы приходится пожалуй что чаще, чем менять языки программирования. Ну а для того, что входит в текущий набор... понимать приоритеты для трёх-четырёх языков опять-таки никаких проблем не вызывает. AkinaДля начала подели приоритетность на абсолютную и языкозависимую. Использование первой естественно. Использование второй - более чем сомнительное занятие. Код не только плохочитаем, но и может оказаться непереносимым. Например, в MS SQL приоритет XOR выше, чем у NOT, а в MySQL наоборот... Блестящий совет. То есть завтра какой-нибудь придурок делает какую-нибудь явную хрень (типа приоритета XOR выше, чем у NOT), и сразу же тот код, который сегодня был естественным и хорошим, завтра же становится более чем сомнительным и плохим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:29 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
MasterZivнаоборот, лишние скобки создают нечитаемый код. поэтому лишние скобки нужно убирать.LISP не может согласиться с вами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:49 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
softwarerНапример, в MS SQL приоритет XOR выше, чем у NOT Хотя если секунду подумать, вообще интересно. Как тогда этот транслятор обходится с выражением NOT A XOR NOT B. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 16:51 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за ответы MasterZivУчи математику и булеву алгебру, если ты ещё их не знаешь (хотя это совсем странно, 4 класс школы, если я не ошибаюсь, а булева -- нач. курс института Нет, я знаю приоритеты и арифметических операторов (*,+,/,-). И операторов булевой алгебры, просто для сложных выражений, которые составлены из множества булевых операторов, гораздо проще ориентироваться в коде, если приоритеты выставляются круглыми скобками. MasterZiv но на это я дам подсказку -- AND -- называют логическим умножением (& или && ), OR -- логическим сложением (| или ||), поэтому относительные приоритеты у этих операций такие же, как и у соотв. операций алгебры чисел -- у AND больше, у OR меньше. Запомнив эти другие названия этих операций ты всегда будешь помнить их приоритеты. Надо ещё запомнить, что логическое НЕ имеет самый большой приоритет (больше AND и OR), можно считать, что NOT -- это логический унарный минус (смена знака). А XOR используется достаточно редко, там можно и скобки поставить.) Спасибо, тоже известно, но не помешает продублировать в памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:01 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
softwarerТо есть завтра какой-нибудь придурок делает какую-нибудь явную хрень (типа приоритета XOR выше, чем у NOT), и сразу же тот код, который сегодня был естественным и хорошим, завтра же становится более чем сомнительным и плохим. Нет, он и раньше был плохим, просто не каждый это понимал. Пример такого разночтения я привёл. И те, кто переносит свои выросшие проекты с MySQL на MS SQL, хлебают своего же дерьма полной ложкой, если заблаговременно не позаботились в т.ч. и об этой стороне переносимости кода. Что же до "придурок" - те системы, которые широко используются, настолько широко, что с их пониманием приоритетности приходится считаться, создают вовсе даже не придурки. И их понимание приоритетности никогда не строится на пустом месте и не высасывается из пальца. Прежде чем называть их придурками, надо получить на это право - как минимум созданием чего-либо аналогичного по масштабу значимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:24 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
softwarersoftwarerНапример, в MS SQL приоритет XOR выше, чем у NOT Хотя если секунду подумать, вообще интересно. Как тогда этот транслятор обходится с выражением NOT A XOR NOT B. Вариантов два. NOT (A XOR NOT B) - так посчитает MS SQL (NOT A) XOR (NOT B) - так посчитает MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:28 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Сегодняшняя неделя пройдет под флагом "синтаксических холиваров". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:39 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
AkinasoftwarerТо есть завтра какой-нибудь придурок делает какую-нибудь явную хрень (типа приоритета XOR выше, чем у NOT), и сразу же тот код, который сегодня был естественным и хорошим, завтра же становится более чем сомнительным и плохим. Нет, он и раньше был плохим, просто не каждый это понимал. В том числе Akina 16944631 , согласно которому он был "естественным" до тех пор, пока у всех было одинаково. AkinaИ те, кто переносит свои выросшие проекты с MySQL на MS SQL, хлебают своего же дерьма полной ложкой, если заблаговременно не позаботились в т.ч. и об этой стороне переносимости кода. Как бы деликатно сказать.... сама постановка вопроса настолько идиотская, что вовсе не приоритет операций будет в этом случае главной проблемой. AkinaЧто же до "придурок" - те системы, которые широко используются, настолько широко, что с их пониманием приоритетности приходится считаться, создают вовсе даже не придурки. И их понимание приоритетности никогда не строится на пустом месте и не высасывается из пальца. Вы плохо представляете себе жизненный цикл систем. Скажем, однажды, в конце семидесятых годов, некоторые люди, которые писали на ассемблере первую версию Oracle, выбрали для хранения строк "паскалевский" формат, ибо им так было удобнее по их инструментальным средствам. Чуть позже, в конце восьмидесятых годов, другие люди, которые писали альтернативные rdbms на сях, выбрали для хранения строк "сишный" формат, ибо им так было удобнее по их инструментальным средствам. Прямым следствием этих двух решений стали бущующий по сей день идиотизм "пустая строка должна отличаться от null" и флейм "в оракле строки не как везде". Подобные эпизоды, безусловно, появляются не на пустом месте, но если Вы думаете, что где-то там сидят высоколобые мудрые разработчики и тщательнейше планируют все варианты и их последствия на сорок лет вперёд, то Вы глубоко заблуждаетесь. Тем не менее, если о пустых строках в принципе можно спорить, то ряд подобных "не из пальца" решений иначе как идиотизмом не назовёшь. Скажем, в том же MSSQL очень долго unique constraint допускал один и только один null в таблице, а на попытку вставить второй говорил "нарушение уникальности". И описанная Вами оригинальная схема приоритетов - если это действительно так - ровно из той же серии. Хотя у того и другого, безусловно, есть какие-то внутренние причины, и при желании даже можно раскопать, какие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:40 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
AkinaВариантов два. NOT (A XOR NOT B) - так посчитает MS SQL По идее, он вообще должен выдать синтаксическую ошибку в этом случае и требовать записать NOT A XOR (NOT B). В противном случае грамматика вместо LR(x) или чего-нибудь другого приятного становится контекстно-свободной с соответствующими последствиями для удобства и эффективности транслятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:45 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Я тут на бумажке таблицу истинности набросал. Вобщем Код: plaintext 1. А вы говорите - слон... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:52 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
maytonЯ тут на бумажке таблицу истинности набросал. Вобщем Дык. Именно преобразованием в обратную сторону я это и получил, прикидывая, для чего такие приоритеты вообще могут понадобиться :) Правда имхо такие вещи нужно делать в уме, равно как всякие not (a and b) etc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 17:57 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Если не путаю: Код: sql 1. т.е. вообще пофиг что приоритетнее XOR или NOT Приведите кто-нибудь реальный пример когда приоритет меняет результат. Я такой придумать не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:11 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Dima T, Вы правы, если говорить только о XOR и NOT. Проблему представляет другое, а именно то, что против всякой привычной логики, XOR оказывается по приоритету выше AND. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:19 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
George-III просто для сложных выражений , которые составлены из множества булевых операторов, гораздо проще ориентироваться в коде, если приоритеты выставляются круглыми скобками.Судя по начавшемуся холиварчику, следует не только ставить скобки, но и желательно весьма сложные выражения подсчитывать за несколько ходов, разделяя их на более простые и храня промежуточные результаты в переменных. Хотя, вам неплохо было бы привести пример сложного безскобочного выражения, так было бы яснее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:22 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Вот достаточно частый пример который я объясняю своим девелоперам. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:22 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
For AllLISP не может согласиться с вами В лиспе лишних скобок нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:39 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyFor AllLISP не может согласиться с вами В лиспе лишних скобок нет :) +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:48 |
|
||
|
Использование приоритетности операторов или скобки
|
|||
|---|---|---|---|
|
#18+
S.G.желательно весьма сложные выражения подсчитывать за несколько ходов, разделяя их на более простые и храня промежуточные результаты в переменных.До завершения стадии отладки это может быть полезным. softwarerописанная Вами оригинальная схема приоритетов - если это действительно так - ровно из той же серии.Несомненно. Но она немного упрощает жизнь. PS. Мне лично скобок как бы не жалко. И лишних переменных тоже. Читабельность кода мне роднее и дороже - впрочем, я не пишу критичных секций, так что дополнительные миллисекунды и байты погоды не делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 18:49 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38823796&tid=1341143]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
198ms |
get topic data: |
5ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 488ms |

| 0 / 0 |
