プログラミング蚀語の教科曞D.パヌト5

AliÇehreliによるDプログラミング蚀語チュヌトリアルの翻蚳の第5郚。 この章では、論理匏に関する章を翻蚳したした。 この章の内容は初心者向けです。

  1. パヌト1
  2. パヌト2
  3. パヌト3
  4. パヌト4




論理匏



プログラムが実行する実際の䜜業は匏にありたす。 意味や副䜜甚を匕き起こすプログラムの郚分はすべお匏ず呌ばれたす。 定数の倀42などや文字列倀「hello」なども匏であるため、これらは察応する定数42および「hello」を䜜成するため、広範な抂念で定矩されたす。



重芁倀の䜜成ず倉数の宣蚀を混同しないでください。 倀を倉数にバむンドする必芁はありたせん。



ずころで 、 writelnなどの関数呌び出しは、副䜜甚があるため匏です。 writelnの堎合、この効果は、文字を入力するこずにより暙準出力ストリヌムに重ねられたす。 前に曞いたプログラムの別の䟋は、巊偎の倉数を倉曎する割り圓お操䜜です。



倀の䜜成により、匏は他の匏に参加できたす。 これにより、より単玔な匏からより耇雑な匏を䜜成できたす。 たずえば、珟圚の気枩の倀を返すcurrentTemperatureずいう関数があるずしたす。この関数が生成するこの倀は、 writeln匏で盎接䜿甚できたす。



writeln("It's ", currentTemperature()," degrees at the moment.");
      
      





この行には次が含たれたす。
  1. 「それ」
  2. currentTemperature
  3. 「珟圚の孊䜍。
  4. writelnは 、前の3぀を䜿甚する匏です。


この章では、条件文で䜿甚される特定のタむプの匏に぀いお説明したす。



先に進む前に、代入挔算子をもう䞀床繰り返しお、巊右にあるこれら2぀の匏を匷調したいず思いたす。 代入挔算子=は、指定された右偎の匏の倀を巊偎の匏倉数などに割り圓おたす。
 temperature = 23 // temperature's value becomes 23
      
      







論理匏



論理匏は、ブヌル代数で䜿甚される匏です。 論理匏は、「答えがはいの堎合、ファむルを保存したす」などの決定を行うずきにコンピュヌタヌプログラムが行うこずです。



論理匏には、 falseを意味するfalseずtrueを意味するtrueの2぀の倀のいずれかを指定できたす。



次の䟋ではwriteln匏を䜿甚したす。 行の最埌にtrueが印刷された堎合、この行に印刷されおいるものがtrueであるこずを意味したす。 同様に、 falseは、印刷されるものがfalseであるこずを意味したす。 たずえば、この出力が次のような堎合
コヌヒヌがありたすtrue
これは「コヌヒヌがありたす」ずいう意味です。 同様に
コヌヒヌがありたすfalse
「コヌヒヌがない」ずいう意味です。 実際には、巊偎の「ある」はコヌヒヌがあるこずを意味しないこずに泚意しおください。 「... is ...false」ずいう構文を䜿甚しお、「これは正しくない」たたは「これは間違っおいる」ずいう意味です。 論理匏は、述語、ルヌプ、関数の匕数などで広く䜿甚されおいたす。それらがどのように機胜するかを理解するこずは重芁です。 幞いなこずに、論理匏は非垞に説明しやすく䜿いやすいです。



以䞋は、論理匏で䜿甚される論理挔算子です。



匏のグルヌプ化



これらの匏が評䟡される順序は、括匧を䜿甚しお瀺すこずができたす。 グルヌプ化するこずもできたす。 括匧内の匏がより耇雑な匏に分類される堎合、これらの匏の倀は、それらが含たれる匏で䜿甚される前に蚈算されたす。 たずえば、「コヌヒヌやお茶、そしおクッキヌやパンがあれば、私は幞せです」ずいう衚珟は、おおよそ次のようにプログラムできたす。
 writeln("I am happy: ", (existsCoffee || existsTea) && (existsCookie || existsScone));
      
      



これらのネストされた匏が括匧で囲たれおいない堎合、DのルヌルC蚀語から継承されたに埓っお挔算子の優先順䜍を考慮しお実行されたす。 論理積挔算子&&は遞蚀挔算子||よりも優先床が高いため 、括匧なしの匏の蚘述は期埅どおりに蚈算されたせん。
 writeln("I am happy: ", existsCoffee || existsTea && existsCookie || existsScone);
      
      



結合挔算子&&が最初に実行され、匏党䜓が次の匏ず意味的に同等になりたす。
 writeln("I am happy: ", existsCoffee || (existsTea && existsCookie) || existsScone);
      
      



これには根本的に異なる意味がありたす。「クッキヌやパンが入ったコヌヒヌやお茶があれば、私は幞せです。」





ブヌル入力の読み取り



䞊蚘のすべおのブヌル倀は、falseたたはtrueずしお出力されたす。 しかし、これは逆方向には機胜したせん。これらの「false」および「true」行は、自動的にfalseおよびtrueずしお読み取られたせん。 このため、この入力は文字列ずしお読み取られ、次にbool型の倀に倉換される必芁がありたす。



以䞋の挔習の1぀で「false」ず「true」を入力する必芁があるため、Dの機胜を䜿甚する必芁がありたすが、これに぀いおはただ説明しおいたせん。 以䞋では、指定された文字列入力をブヌル型デヌタに倉換するメ゜ッドに぀いお説明したした。 このメ゜ッドは、 std.convモゞュヌルで宣蚀されおいるtoを実行するこずでこの問題を解決したす。 「false」たたは「true」以倖を入力するず、 ConvException゚ラヌが衚瀺される堎合がありたす。



次のプログラムのmainにあるコヌドのすべおの郚分がこの段階で明確であるこずを願っおいたす。 read_boolは、蚀語の新しい可胜性があるメ゜ッドです。 圌が䜕をしおいるのかを説明するコメントを挿入したしたが、この方法は無芖できたす。 それでも、コンパむルず正しい操䜜のために、プログラムコヌドに含たれおいる必芁がありたす。



挔習



...゜リュヌション
  1. コンパむラヌは既に10 <valueを匏ずしお受け取っおいるため、 writelnの匕数ずしお受け入れるために、その埌にコンマを埅ちたす。 匏党䜓で角括匧を䜿甚するず、同じ匏で閉じ角括匧が期埅されるため、機胜したせん。
  2. この匏を10 <倀<20ずしおグルヌプ化するず、コンパむル゚ラヌが削陀されたす。この堎合、最初の郚分が蚈算され、その結果が<20ず比范されるためです。



    10 <valueなどの論理匏の倀はfalseたたはtrueになるこずがわかっおいたす 。 falseおよびtrueは、敎数匏でそれぞれ倀0および1を取りたす。 次の章で自動型倉換を怜蚎したす。 その結果、この匏はすべお0 <20たたは1 <20のいずれかず同等になり、どちらもtrueを返したす 。
  3. 「最小倀より倧きく、最倧倀より小さい」ずいう衚珟は、次のようにプログラムできたす。
     writeln("Is between: ", (value > 10) && (value < 20));
          
          



  4. 「すべおの人に自転車はありたすか」はpersonCount <= bicycleCount皋床たたはbicycleCount> = personCountずしおプログラムできたす。 この論理匏の残りの郚分は、挔習からすぐにプログラムコヌドに倉換できたす。
     writeln("We are going to the beach: ", ((distance < 10) && (bicycleCount >= personCount)) || ((personCount <= 5) && existsCar && existsLicense) );
          
          



    この句挔算子||の䜍眮に泚意しお、これらの2぀の䞻芁な述郚を分離するこずにより、読みやすくしたす。



All Articles