Страница 3 из 3
Re: Пожелания
Добавлено: 05.03.2013 00:07:39
yantux
Лекс Айрин писал(а):yantux писал(а):но это всё не то, я имелл ввиду:
А Если будет код типа:
Код: Выделить всё
begin(first_block)
код 1
end(first_block);
код 2
begin(first_block)
код 3
end(first_block);
.....
begin(first_block)
код 4
end(first_block);
Я бы хотело, чтобы компилятор ругнулся на такой код, точнее на повторяющееся first_block
Re: Пожелания
Добавлено: 05.03.2013 00:28:52
Лекс Айрин
yantux, а на что тут ругаться? Это нормальный программный текст.
Например, такого вида:
Код: Выделить всё
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
form2.Show;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
form2.Hide;
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
Var
S:string;
Node:TTreeNode;
begin
S:='test'; {добавить потом форму ввода заголовка и пр.}
Node:=Form1.TreeView1.Selected;
Form1.TreeView1.Items.Add (Node, S);
Node:=Form1.TreeView1.Selected.GetNext;
Form1.TreeView1.Items.AddChild (Node,'добавить');
end;
procedure TForm1.ToolButton6Click(Sender: TObject);
Var
S:string;
Node:TTreeNode;
begin
S:='testChild'; {добавить потом форму ввода заголовка и пр.}
Node:=Form1.TreeView1.Selected;
Form1.TreeView1.Items.AddChild(Node, S);
end;
Но вот маркировка блоков его испоганит.
Re: Пожелания
Добавлено: 05.03.2013 07:43:44
yantux_netbook
Лекс Айрин писал(а):B4rr4cuda, я специально привел пример неудобочитаемого кода, для которого невозможно добиться ясности подписывая операторные скобки.
Зато такой код удобно редактировать в редакторе. Во всяком случае, при свёртке кода, видно функциональное назначение каждой пары begin()/end();\
Если расставлять комменты, то в процессе редактирования, удаления, добавления begin/end надо вручную следить за их актуальностью. В результате так или иначе сработает человеческий фактор и комменты перепутаются.
Re: Пожелания
Добавлено: 05.03.2013 09:14:09
Лекс Айрин
yantux_netbook, правильно. При том, что излишнее комментирование это минус программы.
Re: Пожелания
Добавлено: 05.03.2013 12:13:11
iN0k
как мне кажется тут есть некоторое недопонимание
yantux писал(а):...
У Паскаля есть операторы begin и end, у языка Си и С++ есть скобки { }.
...
что, вообще говоря,
неточно. Языковые конструкции типа:
begin и
end в Паскале и
{ } в Си, это "
Операторные Скобки".
смысл которых аналогичен скобкам в математических выражениях: ((1+x)*2)/((123+x)*4).
Re: Пожелания
Добавлено: 05.03.2013 17:49:11
Лекс Айрин
iN0k, это, думаю, все осознают.
Re: Пожелания
Добавлено: 05.03.2013 19:30:38
yantux_netbook
iN0k писал(а):как мне кажется тут есть некоторое недопонимание
yantux писал(а):...
У Паскаля есть операторы begin и end, у языка Си и С++ есть скобки { }.
...
что, вообще говоря,
неточно. Языковые конструкции типа:
begin и
end в Паскале и
{ } в Си, это "
Операторные Скобки".
смысл которых аналогичен скобкам в математических выражениях: ((1+x)*2)/((123+x)*4).
Я не достаточно глубоко знаю языки паскаль и Си/С++. Для меня begin/end идентичен {}.
Re: Пожелания
Добавлено: 05.03.2013 21:21:58
yantux
Лекс Айрин писал(а):yantux, а на что тут ругаться? Это нормальный программный текст.
Например, такого вида:
Код: Выделить всё
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
form2.Show;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
form2.Hide;
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
Var
S:string;
Node:TTreeNode;
begin
S:='test'; {добавить потом форму ввода заголовка и пр.}
Node:=Form1.TreeView1.Selected;
Form1.TreeView1.Items.Add (Node, S);
Node:=Form1.TreeView1.Selected.GetNext;
Form1.TreeView1.Items.AddChild (Node,'добавить');
end;
procedure TForm1.ToolButton6Click(Sender: TObject);
Var
S:string;
Node:TTreeNode;
begin
S:='testChild'; {добавить потом форму ввода заголовка и пр.}
Node:=Form1.TreeView1.Selected;
Form1.TreeView1.Items.AddChild(Node, S);
end;
Но вот маркировка блоков его испоганит.
Не имеет смысла делать маркировку блоков процедуры или функции. Имеет смысл делать маркировку блоков внутри функции/процедуры.
Re: Пожелания
Добавлено: 05.03.2013 21:52:12
Лекс Айрин
yantux_netbook, ты прав. Абсолютно идентичны. Просто называются они так -- операторные скобки.
Не имеет смысла делать маркировку блоков процедуры или функции. Имеет смысл делать маркировку блоков внутри функции/процедуры.
Так тебе нужно шашечки или ехать? А то как в том анекдоте получается... "туда-сюда меня раздражает!" Проще рамочки вокруг блоков рисовать. Разноцветные. И нагляднее.
ЗЫ: правила правильного оформления кода формировались минимум 30лет, думаешь, так легко их улучшить не портя восприятия программы?
Кстати, только сегодня, удаляя мертвый код, я от метода оставил только часть. Причем, чтобы не искать где этот несчастный "begin" я закомментил первый попавшийся "end", чтобы сбалансировать скобки. И мне до синей лампочки к какому уровню вложенности он относился. Закончив, я просто стер лишнее и выравнял текст.
Re: Пожелания
Добавлено: 05.03.2013 22:51:17
iN0k
Лекс Айрин писал(а):iN0k, это, думаю, все осознают.
ну тогда бы этого "срача" небыло

еще в школе учат: если формула выглядит сложной, выдели кусок в "переменную" и считай по частям.
вариант 1: "сложное" выражение
вариант 2:"упрощенное" выражение
вариант N:утрируем до упора
как видно в последнем примере, вопроса о скобках нет. У каждого
begin будет однозначно-очевидный
end, и IDE подскажет где какого нет.
а использование конструкций вида
if/endif,
case/endcase и аналогов информативности не добавляет, а при рефакторинге дак просто бесит.
Re: Пожелания
Добавлено: 06.03.2013 00:19:21
Лекс Айрин
iN0k писал(а):как видно в последнем примере, вопроса о скобках нет. У каждого begin будет однозначно-очевидный end, и IDE подскажет где какого нет.
"Математический" подход раздувает текст программы, так как все временные переменные надо где-то хранить. Хорошо если компилятор оптимизирует программу так, что большая из часть исчезнет... а если нет?
iN0k писал(а):а использование конструкций вида if/endif, case/endcase и аналогов информативности не добавляет, а при рефакторинге дак просто бесит.
Я то это понимаю, то некоторым это неочевидно.