Пожелания

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Re: Пожелания

Сообщение yantux » 05.03.2013 00:07:39

Лекс Айрин писал(а):
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
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

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;

Но вот маркировка блоков его испоганит.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Пожелания

Сообщение yantux_netbook » 05.03.2013 07:43:44

Лекс Айрин писал(а):B4rr4cuda, я специально привел пример неудобочитаемого кода, для которого невозможно добиться ясности подписывая операторные скобки.

Зато такой код удобно редактировать в редакторе. Во всяком случае, при свёртке кода, видно функциональное назначение каждой пары begin()/end();\

Если расставлять комменты, то в процессе редактирования, удаления, добавления begin/end надо вручную следить за их актуальностью. В результате так или иначе сработает человеческий фактор и комменты перепутаются.
yantux_netbook
новенький
 
Сообщения: 15
Зарегистрирован: 30.10.2012 23:13:24

Re: Пожелания

Сообщение Лекс Айрин » 05.03.2013 09:14:09

yantux_netbook, правильно. При том, что излишнее комментирование это минус программы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Пожелания

Сообщение iN0k » 05.03.2013 12:13:11

как мне кажется тут есть некоторое недопонимание

yantux писал(а):...
У Паскаля есть операторы begin и end, у языка Си и С++ есть скобки { }.
...


что, вообще говоря, неточно. Языковые конструкции типа: begin и end в Паскале и { } в Си, это "Операторные Скобки".
смысл которых аналогичен скобкам в математических выражениях: ((1+x)*2)/((123+x)*4).
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: Пожелания

Сообщение Лекс Айрин » 05.03.2013 17:49:11

iN0k, это, думаю, все осознают.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Пожелания

Сообщение yantux_netbook » 05.03.2013 19:30:38

iN0k писал(а):как мне кажется тут есть некоторое недопонимание

yantux писал(а):...
У Паскаля есть операторы begin и end, у языка Си и С++ есть скобки { }.
...


что, вообще говоря, неточно. Языковые конструкции типа: begin и end в Паскале и { } в Си, это "Операторные Скобки".
смысл которых аналогичен скобкам в математических выражениях: ((1+x)*2)/((123+x)*4).


Я не достаточно глубоко знаю языки паскаль и Си/С++. Для меня begin/end идентичен {}.
yantux_netbook
новенький
 
Сообщения: 15
Зарегистрирован: 30.10.2012 23:13:24

Re: Пожелания

Сообщение yantux » 05.03.2013 21:21:58

Лекс Айрин писал(а):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;

Но вот маркировка блоков его испоганит.


Не имеет смысла делать маркировку блоков процедуры или функции. Имеет смысл делать маркировку блоков внутри функции/процедуры.
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Пожелания

Сообщение Лекс Айрин » 05.03.2013 21:52:12

yantux_netbook, ты прав. Абсолютно идентичны. Просто называются они так -- операторные скобки.

Не имеет смысла делать маркировку блоков процедуры или функции. Имеет смысл делать маркировку блоков внутри функции/процедуры.


Так тебе нужно шашечки или ехать? А то как в том анекдоте получается... "туда-сюда меня раздражает!" Проще рамочки вокруг блоков рисовать. Разноцветные. И нагляднее.

ЗЫ: правила правильного оформления кода формировались минимум 30лет, думаешь, так легко их улучшить не портя восприятия программы?

Кстати, только сегодня, удаляя мертвый код, я от метода оставил только часть. Причем, чтобы не искать где этот несчастный "begin" я закомментил первый попавшийся "end", чтобы сбалансировать скобки. И мне до синей лампочки к какому уровню вложенности он относился. Закончив, я просто стер лишнее и выравнял текст.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Пожелания

Сообщение iN0k » 05.03.2013 22:51:17

Лекс Айрин писал(а):iN0k, это, думаю, все осознают.


ну тогда бы этого "срача" небыло :D

еще в школе учат: если формула выглядит сложной, выдели кусок в "переменную" и считай по частям.
вариант 1: "сложное" выражение
Код: Выделить всё
F=((1+x)*2)/((123+x)*4)

вариант 2:"упрощенное" выражение
Код: Выделить всё
a=123+x
F=((1+x)*2)/(a*4)

вариант N:утрируем до упора
Код: Выделить всё
a=123+x
b=a*4
y=1+x
z=y*2
F=z/b

как видно в последнем примере, вопроса о скобках нет. У каждого begin будет однозначно-очевидный end, и IDE подскажет где какого нет.

а использование конструкций вида if/endif, case/endcase и аналогов информативности не добавляет, а при рефакторинге дак просто бесит.
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: Пожелания

Сообщение Лекс Айрин » 06.03.2013 00:19:21

iN0k писал(а):как видно в последнем примере, вопроса о скобках нет. У каждого begin будет однозначно-очевидный end, и IDE подскажет где какого нет.


"Математический" подход раздувает текст программы, так как все временные переменные надо где-то хранить. Хорошо если компилятор оптимизирует программу так, что большая из часть исчезнет... а если нет?

iN0k писал(а):а использование конструкций вида if/endif, case/endcase и аналогов информативности не добавляет, а при рефакторинге дак просто бесит.


Я то это понимаю, то некоторым это неочевидно.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru