|
|
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Приветствую уважаемых Delphi гуру. Мне по работе приходится сопровождать Delphi-проект со сложными логическими выражениями. Речь идет об операторах IF () THEN , внутри которых длинные многострочные трудночитаемые "условия" : (A + B(C*D-E) > X) OR (L < K+1) AND (....)) Для удобства восприятия я хочу их отформатировать , м.б. разбить на несколько строк, м.б. сделать отступы для вложенных SUB-условий, чтоб легко читалось. Но, чтоб не придумывать велосипед, может уже есть методика? Подскажите, как вы оформляете длинные-сложные IF-ы? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:22 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, методику ... не знаю. Я стараюсь не писать длинные IF. Разбиваю их не несколько последовательных вычислений. Получается нагляднее и промежуточные результаты легче контролировать. Кстати, вопрос лучше направить в раздел C++ , для их языка более актуальнее, чем для Delphi :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:33 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, 1. форматирование 2. разбивай if'ы на внутренние функции: Код: pascal 1. Раньше каждая из функций была частью условия, и читаемость всего этого была никакая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:34 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Заведите булевы переменные с читаемыми именами, присваивайте им сгруппированные условия, комментируйте, что сравнивали. Потом заводите еще переменные и присваивайте им сочетания полученных результатов, комментируйте, а в if - только сочетания верхнего уровня. И отлаживаться легче будет (просмотр значений промежуточных переменных покажет где or с and перепутали). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:35 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Делай так, чтобы тебе самому было максимально комфортнее их разбирать. И о методиках не парься.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:36 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Vlad F, возможно, что он пока не знает возможные варианты :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 22:39 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
makhaon, Ты палец свой назидательный при этом поднимал?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2019, 23:19 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Vlad F, я всего лишь показал, как делаю сам. впрочем, как и всегда. а уж внимать или нет - дело каждого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 00:35 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
bk0010Заведите булевы переменные с читаемыми именами, присваивайте им сгруппированные условия, комментируйте, что сравнивали. Потом заводите еще переменные и присваивайте им сочетания полученных результатов, комментируйте, а в if - только сочетания верхнего уровня. И отлаживаться легче будет (просмотр значений промежуточных переменных покажет где or с and перепутали). +1 Помимо удобства отладки это ещё резко облегчает жизнь, когда заказчик впоследствии начинает уточнять или менять требования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 03:05 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за ответы и полезную информацию. Как бороться с длинными логическими выражениями специалисты из раздела C++ советуют "не разбивать на части, а форматировать в несколько строк с иерархическими отступами и явными скобками" ... я окончательно не решил, но практика покажет, что удобней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 11:17 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Как бороться с длинными логическими выражениями специалисты из раздела C++ советуют "не разбивать на части, а форматировать в несколько строк с иерархическими отступами и явными скобками" У С++ и у большей части других ЯП другой приоритет булевых операций, нежели в Delphi. В Delphi приходится указывать больше скобок, нежели в С++, зато, на мой взгляд, читабельность кода от этого становится лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 13:04 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Скорее дело не в приоритете, а в обозначении битовых и логических операторов, одинаково или по-разному Но лучше 10 раз поставить лишние скобки, чем один раз при модифицировании старого условия не угадать и получить баг, срабатывающий один раз из 128 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 13:16 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Artem.1stформатировать в несколько строк с иерархическими отступами и явными скобками IF с длинными выражениями - это тоже delphi код. Так почему бы его не форматировать для удобства чтения, разбить на строки c отступами. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Разбить условие на части и вынести в отдельные функции - идея сомнительная, т.к. получишь лишь "псевдонаглядность" , и чтоб просмотреть "условие" надо облазить все эти функции, а тут вся логика в одном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:09 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:21 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Foxpcв переменные тоже самое можете запихнуть Но сами переменные нужно объявлять. Разбиваем условие на 10 частей, и получаем 10 новых переменных, а их еще объявить надо. А если в функции 5 таких IF-ов, то получаем (5*10=) 50 переменных. Так переменные упрощают задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:26 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
bk0010Заведите булевы переменные с читаемыми именами,И забудьте про ленивое вычисление булевых выражений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:40 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_И забудьте про ленивое вычисление булевых выражений Не вижу, зачем про него забывать. Но обычно переменные экономят вычисления за счёт того, что одно и то же условие вычисляется один раз, а не поочерёдно в четырёх последовательных if-ах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:44 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Artem.1stПодскажите, как вы оформляете длинные-сложные IF-ы? Спасибо. Их выносят в отдельный метод. Что бы в if..then стоял всегда один оператор. Код: pascal 1. 2. 3. 4. 5. 6. 7. Это значительно повышает читабельность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 14:55 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_bk0010Заведите булевы переменные с читаемыми именами,И забудьте про ленивое вычисление булевых выраженийЛенивое это short-circuit? Или наоборот? Short-circuit, когда вычисление булевского выражение заканчивается, как только становится ясен результат, полезная вещь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 15:07 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
High.Programer, у каждого if есть логика. Разделяй её по переменным если надо. Ой кто тут унас не знает горячие клавиши? Давно редактор сам умеет типы определять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 15:09 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
High.Programer, первое же автоформатирование вернет всё как было :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 15:25 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
DmSerВ Delphi приходится указывать больше скобок, нежели в С++Можно пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 15:57 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Квейд, Код: pascal 1. компилятор будет ругаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2019, 17:10 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
Foxpc, it tepend: Код: pascal 1. 2. 3. 4. всё ок. а с Integer ругается потому, что ты пытаешься разные типы сравнивать - boolean с integer, они в делфи не сравнимы. напиши так: Код: pascal 1. 2. 3. 4. 5. и опять всё ок. си же afaiu умудряются сравнивать булин с интом, что есть однозначный фейл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2019, 00:44 |
|
||
|
А как вы форматируете логические выражения?
|
|||
|---|---|---|---|
|
#18+
makhaon, у оператора "=" приоритет ниже, чем у оператора and . http://docwiki.embarcadero.com/RADStudio/XE3/en/Expressions_(Delphi)#Operator_Precedence И как компилятор оценит это выражение? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. выводит 'fff' Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. выводит 'kkk'; Я предполагаю, что первое выражение, без скобок, оценивается компилятором так: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2019, 02:38 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=77&tid=2039637]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
291ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 560ms |

| 0 / 0 |
