Assigned(p) と if p <> の使い分け


マッコ  2014-04-15 19:25:50  No: 46260

Assigned(p) と if p <> の使い分け
var
  p : PChar;
begin
  if Assigned(p) then (1)

  if p <> nil then    (2)
は、同じことですが(ASMレベルで同じと思ってる)
著名なオープンソースを眺めてると(1)と(2)が統一なく
使用してるのですが、皆さんはどんな基準で、使用してるか
ご意見を聞かせてもらえないでしょうか
以上 マッコ


tor  2014-04-15 20:28:51  No: 46261

ミの文法では、引数を取らない関数やメソッドを呼び出す時には括弧を省略できます。
これは関数・メソッドを指している変数についても同様で、多くの文脈では括弧をつけなくても自動的に関数呼び出しとみなされます。

ヲサヲサヲサニヲサスヲサィゥコヲサノサヲサッッヲサ引数をとらない関数型を定義
ヲサヲサヲサコヲサニサヲサッッヲサその型のポインタを定義
ヲサヲサヲサコスヲサニサ
ヲサヲサヘィノヤモィゥゥサヲサッッヲサニィゥヲサを呼び出して結果を表示

さて、イベントハンドラというのは基本的にメソッドを指している変数です。
このイベントハンドが割り当てられているかどうか検査しようとして、

ヲサヲサヲサニマテヲサヲサヲサヲサヲサヲサョョョヲサッッヲサおそらくコンパイルエラー

というコードを書くとおそらく「メソッドには引数が必要」というエラーになると思います。
これは文法上、左辺に書いた変数名がメソッドの呼び出し、すなわち

ヲサヲサヲサニマティゥヲサヲサヲサヲサヲサヲサョョョヲサッッヲサいや、そう意図したつもりはないんですけど

と解釈されてしまうからなのですね。
そこでこれを回避するために作られたのがチです。

ヲサヲサヲサチィニマテゥヲサヲサョョョヲサッッヲサエラーにならない。

チというのは文法上の曖昧さを回避するためのトリックで、それを除けばと比較するのと何も変わりません。
基本的に使う必要があるのはイベントハンドラの割り当て検査の時だけだと私は思います。

ちなみに、メソッドポインタでなく関数ポインタの場合は
ヲサヲサヲサタミヲサヲサヲサヲサヲサヲサョョョ
という形で検査できますね。
スススススススススススススススススススススススススススススススススススススススス
ニコ 通りすがり
トコ イーアエッーエッアカィ水ゥ アクコアキコイア  書込者ノト:ロ 」。・。。  ン

メソッドポインタは
コッッョョッメチトモッリナカッッ・ナカ・クケ・クツ・ナキ・ツカ・ケチ・ナウ・クア・クト・ナオ・ケナ・クツ」ョナウョクウョチアョナウョクイョツトョナウョクウョクウョナウョクウョクケ゜ョナウョクウョケトョナウョクイョチエョナウョクウョツウョナウョクイョツニ
にあるように
ヲサヲサメソッドヲサポインタは、実際はヲサイヲサつのポインタです。アヲサつのポインタはメソッドのアドレスを格納し、もうヲサアヲサつのポインタはメソッドが属するオブジェクトへの参照を格納します。
なので単純にとは比較できないため、この場合はトリックではなく真にチィゥが必要です。
スススススススススススススススススススススススススススススススススススススススス
ニコ マッコ
トコ イーアエッーエッアカィ水ゥ アケコエキコーウ  書込者ノト:ロ ヲィ  ン

さん、通りすがりさん、ご回答ありがとうございます

簡単なプログラムを作って比較してみました、チモヘで出しました
ヲサヤニアョツアティモコヲサヤマゥサ

ヲサヲサモテコヲサィモアャヲサモイコヲサミテゥコヲサノサ

ヲサヲサヲサヲサヲサタモテスヲサッッア
ヲサヲサヲサヲサヲサヲサチィモテゥヲサッッイ
ヲサヲサタモテヲサコスヲサヌミチィネャヲサァァゥサ

ヲサタモテスヲサッッアを使ったチモヘ
ユアョョイケコヲサ
ーーエオトクウクヲサオオヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ーーエオトクウケヲサクツナテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャ
ーーエオトクウツヲサクウテエニエヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャュ、ー
ーーエオトクウナヲサクケオオニエヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ーンャ
ーーエオトクエアヲサクケエオニテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ーエンャ
ユアョョウーコヲサヲサタモテスヲサ
ーーエオトクエエヲサクウキトニクーーヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ークンャ、ーー
ーーエオトクエクヲサキオアカヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサォ、アカ
ユアョョウアコヲサタモテヲサコスヲサヌミチィネャヲサァァゥサ
ーーエオトクエチヲサカクカエトクエオーーヲサヲサヲサヲサヲサヲサヲサヲサ、ーーエオクカエ
ーーエオトクエニヲサクツエオニテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャロュ、ーエン
ーーエオトクオイヲサナクエアカクニナニニヲサヲサヲサヲサヲサヲサヲサヲサヤラテョヌネ
ーーエオトクオキヲサオーヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ーーエオトクオクヲサナクエツケウニチニニヲサヲサヲサヲサヲサヲサヲサヲサヌミチ
ーーエオトクオトヲサクケエオニクヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ークンャ
ユアョョウイコヲササ
ヲサヲサヲサヲサヲサヲサチィモテゥヲサ
ユアョョイケコヲサ
ーーエオトクウクヲサオオヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ーーエオトクウケヲサクツナテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャ
ーーエオトクウツヲサクウテエニエヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャュ、ー
ーーエオトクウナヲサクケオオニエヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ーンャ
ーーエオトクエアヲサクケエオニテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ーエンャ
ユアョョウーコヲサヲサヲサチィモテゥヲサ
ーーエオトクエエヲサクウキトニクーーヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ークンャ、ーー
ーーエオトクエクヲサキオアカヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサォ、アカ
ユアョョウアコヲサタモテヲサコスヲサヌミチィネャヲサァァゥサ
ーーエオトクエチヲサカクカエトクエオーーヲサヲサヲサヲサヲサヲサヲサヲサ、ーーエオクカエ
ーーエオトクエニヲサクツエオニテヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサャロュ、ーエン
ーーエオトクオイヲサナクエアカクニナニニヲサヲサヲサヲサヲサヲサヲサヲサヤラテョヌネ
ーーエオトクオキヲサオーヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサ
ーーエオトクオクヲサナクエツケウニチニニヲサヲサヲサヲサヲサヲサヲサヲサヌミチ
ーーエオトクオトヲサクケエオニクヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサロュ、ークンャ
ユアョョウイコヲササ

トキが吐いたチモヘです
どちらも同じように見えます
比較の仕方が悪いかも知れませんが
皆様はどう解釈したらよいと思いますか
スススススススススススススススススススススススススススススススススススススススス
ニコ マッコ
トコ イーアエッーエッアカィ水ゥ アケコオカコウウ  書込者ノト:ロ ヲィ  ン

すみません醜くなりました

チモヘではいてるコードはどちらも
ヲサヲサ「ヲサタモテスヲサ」と「ヲサヲサチィモテゥヲサ」も同です
ヲサヲサヲサヲサヲサロュ、ークンャ、ーー
ヲサヲサヲサォ、アカ

すみません、あわてて書きました
以上、マッコ


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加