私はDelphiでOOPについて学んでいます。私は、クラス内で、計算が行われていても値を返さないにもかかわらずプロシージャが使用されていることに気付きましたが、時には値が返されることもあります。いつ私はこれをしなければならないのですか?Delphi OOPでは、オブジェクトはいつ値を返す必要がありますか?
以下の画像では、calAge
は値を返していません。
私はDelphiでOOPについて学んでいます。私は、クラス内で、計算が行われていても値を返さないにもかかわらずプロシージャが使用されていることに気付きましたが、時には値が返されることもあります。いつ私はこれをしなければならないのですか?Delphi OOPでは、オブジェクトはいつ値を返す必要がありますか?
以下の画像では、calAge
は値を返していません。
何混乱することがあります、その関数のコードは、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では、コードの実行によって有用な(または興味深い)値が得られないことがよくあります。それらはfunction
sではなくprocedure
sと書かれています。したがって、オブジェクトのメソッドが便利に値を返すことができる場合はfunction
、それ以外の場合はprocedure
と書いてください。function
と書く場合は、値が返されていることを確認してください。それを通る実行パス。
@DavidHeffernan:訂正してくれてありがとう、私は最終的なパラを取った。私は最初からアイデアを得た場所に自分自身を思い起こさせます。 – MartynA
私はあなたに私たちにあなたに伝えたいことが何であるかを理解するのが難しいです。また、オフサイトのリソースへのリンクを投稿しないでください。そして、間違いなくコードのスクリーンショットを投稿しないでください。ここで生のコードをコピーし、コードの書式設定オプションを使用してください。それは比較的よく機能します。 –
授業中にこの質問をしたときに講師は何を言ったのですか? –
@RobKennedyは何を言っていますか?インストラクターは、コンパイル中にDelphiのコンパイラが発するヒントや警告について教えてもらえますか? IDEで、プロジェクト|オプション]を選択し、ポップアップの[コンパイラメッセージ]タブを参照してください。 – MartynA