Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
ВнизЛюди, которые пишут begin..end вокруг одного оператора Найти похожие ветки
← →
Дмитрий С © (2012-12-13 04:26) [40]
> Плюс мильён. Среда сама подставляет, как минимум end; :)
Среда, стерва такая, перестает дописывать их, если есть вложенная процедура или замыкание :(
По теме. Осознанно пишу begin end для одного оператора в условиях с многооператорным ELSE-ом, например:if conditional then
begin
operator1
end
else
begin
operator2;
operator3;
end;
ЗЫ. Посмотреть бы на повседневный код автора:)
← →
Anatoly Podgoretsky © (2012-12-13 07:48) [41]> Игорь Шевченко (12.12.2012 22:37:00) [0]
И увеличивабт энтропию вселенной
← →
Eraser © (2012-12-13 07:58) [42]
> antonn © (12.12.12 23:10) [15]
> if(visible) then begin
> halt;
> end;
вот это куда большее зло, чем сабж )
← →
Студент (2012-12-13 08:28) [43]function ZLO(a,b,c,d:integer):integer;
begin
return ifthen(a<b, b+c, c+d);
end;
← →
Игорь Шевченко © (2012-12-13 09:49) [44]Anatoly Podgoretsky © (13.12.12 07:48) [41]
Не то слово. Тепловая смерть не за горами.
Дмитрий С © (13.12.12 04:26) [40]
> ЗЫ. Посмотреть бы на повседневный код автора:)
Открой исходники VCL - мой код по стилю примерно такой же.
← →
RWolf © (2012-12-13 09:52) [45]
> Германн © (13.12.12 01:58) [39]
> > Да, и еще враги те, кто избыточные точки с запятой после
> > end ставят. :)А вот это я расцениваю либо как неудачную
> шутку разработчиков паскаля, либо как удачную шутку вышеуказанных.
> :)
всё логично же: точка с запятой — разделитель операторов, begin/end — составной оператор.
← →
Андреевич (2012-12-13 10:26) [46]
> Eraser © (13.12.12 07:58) [42]
>
> > antonn © (12.12.12 23:10) [15]
>
>
> > if(visible) then begin
> > halt;
> > end;
>
> вот это куда большее зло, чем сабж )
так сабж же об этом
← →
O'ShinW © (2012-12-13 11:03) [47]кстати,
вот еще круче :)
...
begin
end;
..
http://delphimaster.net/view/2-1353997983/
← →
Студент (2012-12-13 11:17) [48]TZlo=class
protected:
procedure PowZlo; virtual;
end;
implementation
procedure TZlo.PowZlo;
begin
end;
← →
Inovet © (2012-12-13 11:28) [49]> [47] O"ShinW © (13.12.12 11:03)
> вот еще круче :)
Автор не виноват. Это такое дали скопипастить.
← →
Правнук Винни-пуха (2012-12-13 11:36) [50]Когда начинал работать на Pascal, все устраивало. А после Си-подобного синтаксиса как только не располагал begin/end, везде кажутся громоздкими и нечитаемыми:
if () then
begin
...
end
else
begin
...
end;if ()
then
begin
...
end
else
begin
...
end;
Ну и последние 2 примера: то, что в C++ хорошо, в Object Pacal смерть :)if () then begin
...
end
else begin
...
end;if () then begin
... end
else begin
... end;
← →
Владислав © (2012-12-13 11:39) [51]
> Игорь Шевченко © (12.12.12 22:37)
> Являются тормозом прогресса и врагами нации :)
Я не спорю с begin...end. C "врагами нации" тоже все ясно. :)
Но почему "тормоз прогресса"? :) Можно подробнее?
> Дмитрий С © (13.12.12 04:26) [40]
> ...
> ЗЫ. Посмотреть бы на повседневный код автора:)
Довелось видеть. Аж противно, что придраться не к чему. :о)
← →
Юрий Зотов © (2012-12-13 11:50) [52]А если вот так:
if a > b then
begin
a := b;
b := 0
end
else
begin
b := a;
a := 0
end;
← →
Polevi © (2012-12-13 12:25) [53]В самом распространенном ЯП России по другому вообще никак
Если Истина Тогда
Сообщить("Истина");
КонецЕсли;
← →
icWasya © (2012-12-13 12:29) [54]>а есть ещё те, кто ";" перед end ставят; :)))
Вот чего в паскале точно нельзя, так это ставить ";" перед else :(((
← →
O'ShinW © (2012-12-13 12:31) [55]так:
if a > b then
begin
a := b;
b := 0
end else
begin
b := a;
a := 0
end;
← →
Дмитрий С © (2012-12-13 12:31) [56]
> Довелось видеть. Аж противно, что придраться не к чему.
> :о)
Придраться не к чему? Так не бывает :)
← →
Пит (2012-12-13 12:34) [57]по сабжу - не согласен. То есть, можно конечно и не ставить, но ничего плохого в коде:
if () then
begin
opaGangamStyle;
end;
не вижу. Потому что код в редакторе мог писаться в такой последовательности:if () then
begin_ // <-- курсор здесь
далее жмем enter и современная среда или эксперт вставляет автоматомend;
Только потом идет осознание, что блок состоит всего из одного оператора и зачем париться и удалять begin..end? К тому же не так уж маловероятно, что код будет дополнен.
Плюс это позволяет избежать забавных ошибок, трудно воспринимаемых, особенно при правильном форматировании (как раз недавно нашел такую в чужом коде):if (Condition) then
Obj := GetMyObj;
SetContext(Obj);
WriteLog(Obj.Id);
...
И ты знаешь, что Condition ТОЧНО ВЫПОЛНЯЕТСЯ, а вот в логах ничего не видишь. Долго думаешь - почему так?
Особенно, что некоторые любят писать:if (Condition) then begin
Obj := GetMyObj;
SetContext(Obj);
WriteLog(Obj.Id);
...
и в VCL это также встречается.
Есть посложнее варианты, типа такого:if (Condition1) then
Obj := GetMyObj;
if (Condition2) then
SetContext(Obj);
...
по запарке начинающий программист может просто с ума сойти на отладке. Он вроде точно видит, что Condition2 верное условие, но исполнение даже при трассировке после второй строчке уходит из программы.
Так что на мой взгляд привычка всегда ставить begin..end не такая уж и плохая. Не призываю всех так делать, но и ругать тут не за что.
← →
Пит (2012-12-13 12:43) [58]
> В самом распространенном ЯП России по другому вообще никак
>
> Если Истина Тогда
> Сообщить("Истина");
> КонецЕсли;
в PL/SQL тоже.
← →
Пит (2012-12-13 12:46) [59]
> И ты знаешь, что Condition ТОЧНО ВЫПОЛНЯЕТСЯ, а вот в логах
> ничего не видишь
Надо читать так:
И ты знаешь, что Condition ТОЧНО НЕ ВЫПОЛНЯЕТСЯ, а вот в логах все равно видишь запись )
← →
Игорь Шевченко © (2012-12-13 12:59) [60]Владислав © (13.12.12 11:39) [51]
> Но почему "тормоз прогресса"? :) Можно подробнее?
Потому что тормозят прогресс, что тут неясного ?
> ЗЫ. Посмотреть бы на повседневный код автора:)unit main; interface procedure Test; implementation uses SysUtils, Contnrs,
Classes, Mail2000; type EMail2000GatewayError= class(Exception )end; const
MAIL_BULKSUFFIX="/BULK"; MAIL_BODYFILENAME="letter.body"; type EMailGatewayError
=class(Exception);TEmailAttachment=class private FFileName:string;FSize:Integer;
FData: Pointer; public destructor Destroy;
override;property Data:Pointer read FData write FData;property FileName: string
read FFileName write FFileName;property Size:Integer read FSize write FSize;end;
TEmailAttachments=class(TObjectList )private function GetItems(I: Integer):
TEmailAttachment ; public property Items[I :Integer] :TEmailAttachment read
GetItems; default;end; TLetterState=( lsReceived, lsProcessed,lsVerifying,
lsVerified, lsErrorVerify, lsQueuingTask, lsNotQueuedTask, lsQueuedTask);
TEmailLetter =class private FFromAddress:string ;FBulkMode :Boolean;FSubject:
string ;FBody :string ;FAttachments :TEmailAttachments ;FTaskCode :string;
FState:TLetterState;FUIDL:string;function GetNamebyUIDL:string;public constructor
Create;destructor Destroy;override;property FromAddress:string read FFromAddress
write FFromAddress;property Subject:string read FSubject write FSubject;property BulkMode: Boolean read FBulkMode
write FBulkMode; property Body: string read FBody write FBody; property
Attachments: TEmailAttachments read FAttachments; property TaskCode: string read
FTaskCode write FTaskCode; property State: TLetterState read FState write
FState; property UIDL: string read FUIDL write FUIDL; property NameByUIDL:
string read GetNamebyUIDL; end; procedure Test; const MailHost: string =
"mail.foo.bar"; MailBox: string = "foo"; MailBoxPassword: string = "foobar";
MailPort: Integer = 110; var FPOP: TPOP2000; FMM: TMailMessage2000;
procedure RetrieveMessage(N:Integer) ;var Letter:TEmailLetter;I,AttachCount,Sz:
Integer;Attachment :TEmailAttachment;FAttach :TMailPart;Buffer:Pointer;begin if
not FPOP.RetrieveMessage(N)then begin writeln(Format("Can""t retrieve message %d"
,[N]));Exit;end;writeln(Format("Received message from "%s" with subject "%s"",
[FMM.FromAddress, FMM .Subject])) ;Letter:=nil ;try FMM .FindParts;Letter:=
TEmailLetter.Create;Letter .FromAddress:=string(FMM.FromAddress);Letter.Subject
:=string(FMM.Subject);Letter.Body:=FMM.TextPlain.Text;Letter.UIDL:=FPOP.GetUIDL(
N) ;writeln(Format("Message from "%s" with subject "%s" has UIDL "%s"", [Letter.
FromAddress, Letter.Subject, Letter.UIDL])) ;AttachCount:=FMM.AttachList.Count;
writeln(Format("Message from %s has %d attachments",[FMM.FromAddress,AttachCount]));
for I:=0 to AttachCount-1 do begin FAttach:=FMM.AttachList[I];try FAttach.Decode;
Sz:=FAttach.Decoded.Size;Attachment:=TEmailAttachment.Create;Attachment.FileName
:=string(FAttach.FileName) ;writeln(Format("attachment %d has file name "%s"",[
Succ(I),Attachment.FileName])) ;Attachment.Size := Sz;if Sz>0 then begin GetMem(
Buffer,Sz);FAttach.Decoded.Seek(0,soFromBeginning);FAttach.Decoded.Read(Buffer^,
Sz);Attachment.Data:=Buffer;end;Letter.Attachments.Add(Attachment);except on E :
Exception do writeln(Format("Failed to decode attachment %d (%s)",[I,E.Message]));
end; end; except on E :Exception do begin writeln (Format (
"Failed to retrieve message %d (%s)", [N, E.Message]));FreeAndNil(Letter ); end;
end;end;
Где-то так
← →
xayam © (2012-12-13 13:02) [61]
> что тут неясного ?
не ясно, куда движется прогресс?
← →
DVM © (2012-12-13 13:04) [62]
> Игорь Шевченко © (13.12.12 12:59) [60]
Декодирую :)
procedure Test;
implementation
uses SysUtils, Contnrs,
Classes, Mail2000;
type
EMail2000GatewayError = class(Exception)
end;
const
MAIL_BULKSUFFIX = "/BULK";
MAIL_BODYFILENAME = "letter.body";
type
EMailGatewayError = class(Exception);
TEmailAttachment = class
private
FFileName: string;
FSize: Integer;
FData: Pointer;
public
destructor Destroy; override;
property Data: Pointer read FData write FData;
property FileName: string read FFileName write FFileName;
property Size: Integer read FSize write FSize;
end;
TEmailAttachments = class(TObjectList)
private
function GetItems(I: Integer): TEmailAttachment;
public
property Items[I: Integer]: TEmailAttachment read GetItems; default;
end;
TLetterState = (lsReceived, lsProcessed, lsVerifying, lsVerified,
lsErrorVerify, lsQueuingTask, lsNotQueuedTask, lsQueuedTask);
TEmailLetter = class
private
FFromAddress: string;
FBulkMode: Boolean;
FSubject: string;
FBody: string;
FAttachments: TEmailAttachments;
FTaskCode: string;
FState: TLetterState;
FUIDL: string;
function GetNamebyUIDL: string;
public
constructor Create;
destructor Destroy; override;
property FromAddress: string read FFromAddress write FFromAddress;
property Subject: string read FSubject write FSubject;
property BulkMode: Boolean read FBulkMode write FBulkMode;
property Body: string read FBody write FBody;
property Attachments: TEmailAttachments read FAttachments;
property TaskCode: string read FTaskCode write FTaskCode;
property State: TLetterState read FState write FState;
property UIDL: string read FUIDL write FUIDL;
property NameByUIDL: string read GetNamebyUIDL;
end;
procedure Test;
const
MailHost: string = "mail.foo.bar";
MailBox: string = "foo";
MailBoxPassword: string = "foobar";
MailPort: Integer = 110;
var
FPOP: TPOP2000;
FMM: TMailMessage2000;
procedure RetrieveMessage(N: Integer);
var
Letter: TEmailLetter;
I, AttachCount, Sz: Integer;
Attachment: TEmailAttachment;
FAttach: TMailPart;
Buffer: Pointer;
begin
if not FPOP.RetrieveMessage(N) then
begin
writeln(Format("Can""t retrieve message %d", [N]));
Exit;
end;
writeln(Format("Received message from "%s" with subject "%s"",
[FMM.FromAddress, FMM.Subject]));
Letter := nil;
try
FMM.FindParts;
Letter := TEmailLetter.Create;
Letter.FromAddress := string(FMM.FromAddress);
Letter.Subject := string(FMM.Subject);
Letter.Body := FMM.TextPlain.Text;
Letter.UIDL := FPOP.GetUIDL(N);
writeln(Format("Message from "%s" with subject "%s" has UIDL "%s"",
[Letter.FromAddress, Letter.Subject, Letter.UIDL]));
AttachCount := FMM.AttachList.Count;
writeln(Format("Message from %s has %d attachments",
[FMM.FromAddress, AttachCount]));
for I := 0 to AttachCount - 1 do
begin
FAttach := FMM.AttachList[I];
try
FAttach.Decode;
Sz := FAttach.Decoded.Size;
Attachment := TEmailAttachment.Create;
Attachment.FileName := string(FAttach.FileName);
writeln(Format("attachment %d has file name "%s"",
[Succ(I), Attachment.FileName]));
Attachment.Size := Sz;
if Sz > 0 then
begin
GetMem(Buffer, Sz);
FAttach.Decoded.Seek(0, soFromBeginning);
FAttach.Decoded.Read(Buffer^, Sz);
Attachment.Data := Buffer;
end;
Letter.Attachments.Add(Attachment);
except
on E: Exception do
writeln(Format("Failed to decode attachment %d (%s)",
[I, E.Message]));
end;
end;
except
on E: Exception do
begin
writeln(Format("Failed to retrieve message %d (%s)", [N, E.Message]));
FreeAndNil(Letter);
end;
end;
end;
← →
O'ShinW © (2012-12-13 13:08) [63]if cond1 then
if cond2 then
Do1 else
if cond3 then
Do2 else
Do3;
в таком коде, 100% наставлю бегин-эндов (и, возможно, инвертирую условия)
if cond1 then
begin
if not(cond2) then
begin
if cond3 then
Do2 else
Do3;
end else
Do1;
end;
кому как, а мне - понятнее..
Все-все, уже иду-иду :)
← →
брат Птибурдукова (2012-12-13 13:19) [64]
> Игорь Шевченко © (13.12.12 12:59) [60]
Чё так много пробелов? Нужно рационально расходовать место на жёстком диске.
← →
Игорь Шевченко © (2012-12-13 13:27) [65]DVM © (13.12.12 13:04) [62]
Много времени заняло ? :) DelForExp несколько не так декодировал
← →
Дмитрий С © (2012-12-13 13:31) [66]Ctrl+D, Delphi XE:
unit main;
interface
procedure Test;
implementation
uses SysUtils, Contnrs,
Classes, Mail2000;
type
EMail2000GatewayError = class(Exception)
end;
const
MAIL_BULKSUFFIX = "/BULK";
MAIL_BODYFILENAME = "letter.body";
type
EMailGatewayError = class(Exception);
TEmailAttachment = class
private
FFileName: string;
FSize: Integer;
FData: Pointer;
public
destructor Destroy; override;
property Data: Pointer read FData write FData;
property FileName: string read FFileName write FFileName;
property Size: Integer read FSize write FSize;
end;
TEmailAttachments = class(TObjectList)
private
function GetItems(I: Integer): TEmailAttachment;
public
property Items[I: Integer]: TEmailAttachment read GetItems; default;
end;
TLetterState = (lsReceived, lsProcessed, lsVerifying, lsVerified,
lsErrorVerify, lsQueuingTask, lsNotQueuedTask, lsQueuedTask);
TEmailLetter = class
private
FFromAddress: string;
FBulkMode: Boolean;
FSubject: string;
FBody: string;
FAttachments: TEmailAttachments;
FTaskCode: string;
FState: TLetterState;
FUIDL: string;
function GetNamebyUIDL: string;
public
constructor Create;
destructor Destroy; override;
property FromAddress: string read FFromAddress write FFromAddress;
property Subject: string read FSubject write FSubject;
property BulkMode: Boolean read FBulkMode write FBulkMode;
property Body: string read FBody write FBody;
property Attachments: TEmailAttachments read FAttachments;
property TaskCode: string read FTaskCode write FTaskCode;
property State: TLetterState read FState write FState;
property UIDL: string read FUIDL write FUIDL;
property NameByUIDL: string read GetNamebyUIDL;
end;
procedure Test;
const
MailHost: string = "mail.foo.bar";
MailBox: string = "foo";
MailBoxPassword: string = "foobar";
MailPort: Integer = 110;
var
FPOP: TPOP2000;
FMM: TMailMessage2000;
procedure RetrieveMessage(N: Integer);
var
Letter: TEmailLetter;
I, AttachCount, Sz: Integer;
Attachment: TEmailAttachment;
FAttach: TMailPart;
Buffer: Pointer;
begin
if not FPOP.RetrieveMessage(N) then
begin
writeln(Format("Can""t retrieve message %d", [N]));
Exit;
end;
writeln(Format("Received message from "%s" with subject "%s"",
[FMM.FromAddress, FMM.Subject]));
Letter := nil;
try
FMM.FindParts;
Letter := TEmailLetter.Create;
Letter.FromAddress := string(FMM.FromAddress);
Letter.Subject := string(FMM.Subject);
Letter.Body := FMM.TextPlain.Text;
Letter.UIDL := FPOP.GetUIDL(N);
writeln(Format("Message from "%s" with subject "%s" has UIDL "%s"",
[Letter.FromAddress, Letter.Subject, Letter.UIDL]));
AttachCount := FMM.AttachList.Count;
writeln(Format("Message from %s has %d attachments",
[FMM.FromAddress, AttachCount]));
for I := 0 to AttachCount - 1 do
begin
FAttach := FMM.AttachList[I];
try
FAttach.Decode;
Sz := FAttach.Decoded.Size;
Attachment := TEmailAttachment.Create;
Attachment.FileName := string(FAttach.FileName);
writeln(Format("attachment %d has file name "%s"",
[Succ(I), Attachment.FileName]));
Attachment.Size := Sz;
if Sz > 0 then
begin
GetMem(Buffer, Sz);
FAttach.Decoded.Seek(0, soFromBeginning);
FAttach.Decoded.Read(Buffer^, Sz);
Attachment.Data := Buffer;
end;
Letter.Attachments.Add(Attachment);
except
on E: Exception do
writeln(Format("Failed to decode attachment %d (%s)",
[I, E.Message]));
end;
end;
except
on E: Exception do
begin
writeln(Format("Failed to retrieve message %d (%s)", [N, E.Message]));
FreeAndNil(Letter);
end;
end;
end;
← →
DVM © (2012-12-13 15:45) [67]
> Игорь Шевченко © (13.12.12 13:27) [65]
> DVM © (13.12.12 13:04) [62]
>
> Много времени заняло ? :)
это делфи сама
← →
Jeer © (2012-12-13 16:31) [68]А мне продолжает нравиться ABC-Pascal :)
***
type
Person = class
private
class arr: array of Person; // Классовое поле. Связано не с переменной класса, а с классом.
name: string;
age: integer;
public
class constructor; // Конструктор класса. Вызывается до создания первого объекта класса и до вызова любого классового метода
begin
writeln(" Вызван классовый конструктор");
SetLength(arr,3);
arr[0] := new Person("Иванов",20);
arr[1] := new Person("Петрова",19);
arr[2] := new Person("Попов",35);
end;
constructor (n: string; a: integer);
begin
name := n;
age := a;
end;
function ToString: string; override;
begin
Result := Format("Имя: {0} Возраст: {1}",name,age);
end;
class function RandomPerson: Person; // Классовый метод. Может обращаться только к классовым полям
begin
Result := arr[Random(3)];
end;
end;
begin
writeln("Случайные персоны");
for var i:=1 to 5 do
writeln(Person.RandomPerson); // Вызов классового метода
end.
← →
Дмитрий С © (2012-12-13 16:32) [69]Тем что код в интерфейсе пишется?
← →
Jeer © (2012-12-13 16:36) [70]Это фишка :)
В т.ч., но не только.
Весьма толково "сделан" микс из очевидно востребованных возможностей.
***
uses System.Collections.Generic;
var
a: array [1..5] of integer := (1,3,5,7,9);
s: set of integer;
l: List<integer>;
begin
write("foreach по обычному массиву: ":35);
foreach x: integer in a do
write(x," ");
writeln;
s := [2..5,10..14];
write("foreach по множеству: ":35);
foreach x: integer in s do
write(x," ");
writeln;
l := new List<integer>;
l.Add(7); l.Add(2); l.Add(5);
write("foreach по динамическому массиву: ":35);
foreach x: integer in l do
write(x," ");
end.
← →
Jeer © (2012-12-13 16:39) [71]// Внутриблочные описания переменных
var s: real := 1.0;
// Описание переменной в заголовке цикла (время жизни переменной - до конца тела цикла)
for j: integer := 1 to 10 do
s += j; // Операция += для чисел
← →
vuk © (2012-12-13 17:34) [72]
> Jeer © (13.12.12 16:31) [68]
> А мне продолжает нравиться ABC-Pascal :)
А мне продолжает хотецца паубивать всех изобретателей языков с таким описанием классов. :)
← →
O'ShinW © (2012-12-13 17:43) [73]
> s += j
застрелится, блин. Они уже и в паскале..
← →
O'ShinW © (2012-12-13 17:49) [74]ь :)
чем это s += j лучше, чем s = s + j - непонятно. Вообще. И никогда не будет, хоть убейте.
← →
Игорь Шевченко © (2012-12-13 17:52) [75]O"ShinW © (13.12.12 17:49) [74]
> И никогда не будет, хоть убейте.
Можно начинать ?
← →
Пользователь Интернета (2012-12-13 17:57) [76]Люди, которые пишут цифры ручкой на купюрах, еще большие враги народа и вредители!
← →
KilkennyCat © (2012-12-13 18:29) [77]
> Пользователь Интернета (13.12.12 17:57) [76]
а буквы и знаки препинания?
← →
Дмитрий С © (2012-12-13 18:35) [78]
> Jeer ©
Прикольненько:)
Циклы без описания переменных где-то там, да еще и по массивам (и спискам наверное тоже), круто:)
← →
O'ShinW © (2012-12-13 19:32) [79]
> Можно начинать ?
Что-то у меня такое подозрение, что Вы упорно хотите заняться со мной ненавистью :)
← →
Котик Б (2012-12-13 20:31) [80]А мне вообще ни
begin ... end
ни{ ... }
не нравятся.
Повбьівав бьі...
Каждьій фрагмент кода должен иметь явное начало и явное окончание:IF ... ENDIF
DO ... ENDDO
LOOP ... ENDLOOP
SELECT ... ENDSELECT
Страницы: 1 2 3 4 5 6 вся ветка
Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.015 c