2017-01-21 16 views
0

私はDelphiでOOPについて学んでいます。私は、クラス内で、計算が行われていても値を返さないにもかかわらずプロシージャが使用されていることに気付きましたが、時には値が返されることもあります。いつ私はこれをしなければならないのですか?Delphi OOPでは、オブジェクトはいつ値を返す必要がありますか?

以下の画像では、calAgeは値を返していません。

image

+0

私はあなたに私たちにあなたに伝えたいことが何であるかを理解するのが難しいです。また、オフサイトのリソースへのリンクを投稿しないでください。そして、間違いなくコードのスクリーンショットを投稿しないでください。ここで生のコードをコピーし、コードの書式設定オプションを使用してください。それは比較的よく機能します。 –

+0

授業中にこの質問をしたときに講師は何を言ったのですか? –

+0

@RobKennedyは何を言っていますか?インストラクターは、コンパイル中にDelphiのコンパイラが発するヒントや警告について教えてもらえますか? IDEで、プロジェクト|オプション]を選択し、ポップアップの[コンパイラメッセージ]タブを参照してください。 – MartynA

答えて

1

何混乱することがあります、その関数のコードは、Tschool.Acceptedは明らかに不完全であるということです。 ifステートメントがtrueの場合は関数の結果値に値が割り当てられますが、それ以外の場合は値は割り当てられません。これは実際にはプログラミングエラーです。なぜなら、ifステートメントがfalseを返すと、結果値が未定義であることを意味するからです。

Tschool.Acceptedが間違っている点は、関数を実行するたびに関数の結果に値が割り当てられるという基本的な規則が破られてしまうことです。書かれているように、は、if ...の条件がfalseの場合に割り当てられた結果値を取得しないため、ルールが中断されます。

したがって、プログラミングエラーを修正する1つの方法は、else句をif ...ステートメントの末尾に追加することです。やや非効率的であるが、すべての拠点をカバーしてい

if (Some conditions are true) then 
    Result := True 
else 
    Result := False; 

もう一つの方法は、関数の最初のステートメントとしてResultに所定の値を代入して、いくつかの条件ならば、関数のコードの後半でResultに別の値を割り当てることです(s)が適用されます。 Tschool.Acceptedがブール関数であるため

ところで、あなたはどのような割り当ての右側にありますが、ブール型の式であるため、この

function Tschool.Accepted : Boolean; 
begin 
    Result := (fdeposit) and (fAge >= 4) and (fAge <= 6); 
end; 

のような単一代入文を使用してif ... else ...を書くことを避けることができます。

Delphiでは、コードの実行によって有用な(または興味深い)値が得られないことがよくあります。それらはfunctionsではなくproceduresと書かれています。したがって、オブジェクトのメソッドが便利に値を返すことができる場合はfunction、それ以外の場合はprocedureと書いてください。functionと書く場合は、値が返されていることを確認してください。それを通る実行パス。

+0

@DavidHeffernan:訂正してくれてありがとう、私は最終的なパラを取った。私は最初からアイデアを得た場所に自分自身を思い起こさせます。 – MartynA

関連する問題