2014年1月3日金曜日

Object Pascal Style Guide

「Object Pascal Style Guide」

昔からあるものなのだけど。
Embacadero に移ってからも管理されており今でも入手可能です。
Style Guide といってもPascal は比較的お堅い言語なので仕様的に推奨されない書き方というのは、C等と比べると余り無く、あくまで見た目の問題の話です。

http://edn.embarcadero.com/article/10280

なので、人それぞれ好きなように書けばいいとは思うのだけど。
if ... then begin

end


という書き方が Lazarus の世界でも結構あるらしく、ソース読んでて気になってしまった。


このように書いてしまった人は、もともと Pascal を書く人間ではなかったのだろう・・・とは思う。
それでも初めて Pascal を書いた人がそれを見習ってしまってはいけないと思うので、そうではないのだという事も示さねばならないように思う。

Example:

  // INCORRECT
  if A < B then begin
    DoSomething;
    DoSomethingElse;
  end else begin
    DoThis;
    DoThat;
  end;

  // CORRECT
  if A < B then
  begin
    DoSomething;
    DoSomethingElse;
  end
  else
  begin
    DoThis;
    DoThat;
  end;                  


おそらく C や C++ の

if (...) {

}

https://github.com/NYTimes/objective-c-style-guide

の流れで横に begin が来てしまっているのだろうか。

今に始まったことではなく、25年前に既に多数みられ、実質的に問題はないので気にするほどの事ではないものの、あまりに多い場合や、すべてがそうである場合にはスタイルガイドを見てほしくなります。

if だけでなく while 等もそのように書く。
Pascal は、基本的にブロックの開始と終わりで列を合わせる。

つまり begin と end が縦に並ぶのがの望ましい。
私も本当の所の理由というのは知らないのだけど。
end に対応する begin を探す場合に上を辿るだけで分かるという利点はあります。

if ... then
begin

end

と書く。

  // INCORRECT
  if A < B then DoSomething;

  // CORRECT
  if A < B then
    DoSomething;
 
というのもあり、今どきの高解像度のディスプレイに対しては古さは感じます。

特にポインタを扱う場合など inc や dec は横に書きたくなる場合もあるし、IDE が進歩しているせいもあるので記号のようにコードを扱う事も多々あります。
特に Pascal は、いくらでも手の抜けるコードがかけるため、マクロやスクリプトのように使われることも多々あります。
なので、行単位での追加削除等がしやすいような書き方というのもあるので自由であってよいものの、指標となるようなコードの場合はスタイルガイドに沿ったほうが良いように思うわけです。

まあでも begin が横にくるのは、いかなる場合も推奨されないような気がする・・・。


次に、Delphi と FPC には完全論理評価というコンパイラオプションがあります。

if (length(s)>0) and (s[1]='a') then
begin

end

http://docwiki.embarcadero.com/RADStudio/XE5/ja/式(Delphi)

http://forum.lazarus.freepascal.org/index.php?topic=9202.0


常にそのことを気にかけられるのならが問題ありませんが、そうでないならブロックが1つ増えてしまおうと、元々の意図するところがこのような判定であったのなら、そう書いたほうがよろしいです。


if a then
begin
 if b then
 begin

 end
end



C# が Java のパクリだといわれる中、Javaが流行りだした時、Java は Object Pascal のパクリだろと思った人はあまり多くないらしく、故に C# と Object Pascal をつなげてみる人も少ないようです。

実際の所は、C# は Delphi の親戚のようなもので Pascal の伝統も受け継いでいる。

故になのかどうなのか C# も Object Pascal の Style Guide に似ている部分があります(?)。 (Java も縦に合わせる部分も多いが、for 等は横に書いたりしてもいいらしく、はっきりしなかった。)

http://msdn.microsoft.com/ja-jp/library/vstudio/ff926074.aspx http://www.cis.upenn.edu/~cis193/csstyle.html

namespace N
{
    class C
    {
        void f()
        {
            int x;
        }
    }
}

とはいえ、C系も使い込んできた人間としては、逆に { } が縦に並ぶのはちと気持ちが悪い。
これもいろいろと理由はあるのかもしれませんが。

{}の場合は横につなげるのを推奨してよかったんじゃないのか・・・とも思うものの、これは伝統なのか?と感じられる部分があったのは、少しうれしくなりました。

とりあえず、他にも細かいことがスタイルガイドには書いてあるのだけど。
begin と end の扱いさえ合わせれば、他の所が違っていても、まあそれらしくなります。
なので、新しい言語を学ぶ場合は、言語ごとのスタイルガイドも一度読んでみる事をお勧めします。



0 件のコメント:

コメントを投稿