if SecondCondition then DoSecondAlternative // We are doing 2 because ... else DoThirdAlternative; // Otherwise, We are doing 3 // I might chose this approach if it is a long chain if FirstCondition then DoFirstAlternative // We are doing 1 because ... else if SecondCondition then DoSecondAlternative // We are doing 2 because ... else DoThirdAlternative; // Otherwise, We are doing 3C++/C# and Java people likes to rant about how ugly and verbose our begin / end's are, and I am sure I could rile myself up over their curly brace enclosures and some of the religion connected to those too - but I am not going to go there. However, there are a few things about our enclosures that may be worth thinking over. Some like to dangle their end's at various indentation levels. I prefer to align it with the matching start of the block (do begin, then begin). Why? It makes it is easier to identify the code path in relation to the condition.More enclosures doesn't always mean better readability. Here is an example from Indy9(IdTunnelCommon.pas). Kudzu, I love you - but I disagree with your code style in this file :) (I know I am going to get flamed for this...^^)procedure TReceiver.SetData(const Value: string);var CRC16: Word;begin Locker.Enter; try try fsData := Value; fiMsgLen := Length(fsData); if fiMsgLen > 0 then begin Move(fsData[1], (pBuffer + fiPrenosLen)^, fiMsgLen); fiPrenosLen := fiPrenosLen + fiMsgLen; if (fiPrenosLen >= HeaderLen) then begin // copy the header Move(pBuffer^, Header, HeaderLen); TypeDetected := True; // do we have enough data for the entire message if Header.MsgLen <= fiPrenosLen then begin MsgLen := Header.MsgLen - HeaderLen; Move((pBuffer+HeaderLen)^, Msg^, MsgLen); // Calculate the crc code CRC16 := CRC16Calculator.HashValue(Msg^); if CRC16 <> Header.CRC16 then begin fCRCFailed := True; end else begin fCRCFailed := False; end; fbNewMessage := True; end else begin fbNewMessage := False; end; end else begin TypeDetected := False; end; end else begin fbNewMessage := False; TypeDetected := False; end; except raise; end; finally Locker.Leave; end;end;This little nugget very much bear the signs of being written for debugging, so I am not going to hold it to Kudzu for style (much). It includes a few nice examples of code that can be simplified, so it is all good. So what do I do? • I assume the except block was for debugging, but I'm taking it out. • I might be changing the behaviour by setting two default values up top, but at least there is no doubt about their default value. • But what is with the conditional assignments? Please! BooleanVariable := Expression; !! Don't go "then true else false" on me! • Reworked the comments.Personally, I think it is more readable like this.procedure TReceiver.SetData(const Value: string);var CRC16: Word;begin fbNewMessage := False; TypeDetected := False; Locker.Enter; try fsData := Value; fiMsgLen := Length(fsData); if fiMsgLen > 0 then begin // Data found, Check for Type Move(fsData[1], (pBuffer + fiPrenosLen)^, fiMsgLen); fiPrenosLen := fiPrenosLen + fiMsgLen; TypeDetected := (fiPrenosLen >= HeaderLen); if TypeDetected then begin // We have a type, check header for content Move(pBuffer^, Header,