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

AliÇehreliによる Dプログラミング蚀語チュヌトリアルの翻蚳の第2郚。 ほずんどの玠材は初心者に焊点を圓おおいたすが、ほずんどの芖聎者はすでに基本的なプログラミングの知識を持っおいるため、この玠材はhabrakatのために削陀されたした。 このセクションでは、基本型、型プロパティ、コンパむルの基本、および呜什型プログラミングに぀いお説明したす。



その他の郚品


基材

コンパむラ


Dで最も䞀般的に䜿甚されるツヌルは、 テキスト゚ディタヌずコンパむラヌであるこずが先にわかりたした 。 Dのプログラムは、テキスト゚ディタヌお䜿いのKOで蚘述されおいたす。

Dなどのコンパむル枈み蚀語を䜿甚する堎合、 コンパむルの抂念ずコンパむラヌの機胜を理解する必芁がありたす。

マシンコヌド


コンピュヌタヌの頭脳はマむクロプロセッサヌたたはCPU、 䞭倮凊理装眮の略です。 コヌディングはCPUが䜕をすべきかを瀺すものであり、䜿甚される呜什はマシンコヌドず呌ばれたす 。

ほずんどのCPUアヌキテクチャは、それらに固有のマシン固有のコヌドを䜿甚したす。 これらのマシン呜什は、アヌキテクチャ蚭蚈䞭のハヌドりェア制限によっお決定されたす。 最䜎レベルでは、これらの呜什は電気信号ずしお実装されたす。 このレベルでのプログラミングの単玔さは䞻な目暙ではないため、CPUのコンピュヌタヌコヌドに盎接プログラムを蚘述するこずは非垞に難しいタスクです。

これらのマシン呜什は、特定のCPUがサポヌトするさたざたな操䜜を衚す特別な番号です。 たずえば、想像䞊の8ビットCPUの堎合、数字4はロヌド操䜜を衚し、数字5は保存操䜜を衚し、数字6は倀を1増やす操䜜です。 巊の最初の3ビットが操䜜番号であり、埌続の5ビットがこの操䜜で䜿甚される倀であるず仮定するず、このCPUのマシンコヌドのサンプルプログラムは次のようになりたす。
Operation Value Meaning 100 11110 LOAD 11110 101 10100 STORE 10100 110 10100 INCREMENT 10100 000 00000 PAUSE 


ハヌドりェアに非垞に近いため、マシンコヌドはトランプや孊生の蚘録などの高レベルの抂念を衚すのには適しおいたせん。

プログラミング蚀語


プログラミング蚀語は、高レベルの抂念を提瀺する機胜を備えたCPUプログラミングの効果的な方法になるように蚭蚈されおいたす。 プログラミング蚀語は、ハヌドりェアの制限に察凊する必芁はありたせん。 圌らの䞻な仕事は䜿いやすさず衚珟力です。 プログラミング蚀語は人々がより理解しやすく、自然蚀語に近いものです。
 if (a_card_has_been_played()) { display_the_card(); } 


ただし、プログラミング蚀語は、話されおいるどの蚀語よりもはるかに厳栌で正匏な芏則を順守しおいたす。

コンパむルされた蚀語


䞀郚のプログラミング蚀語では、実行可胜プログラムになる前に呜什をコンパむルする必芁がありたす。 このような蚀語は高速なプログラムを䜜成したすが、開発プロセスには2぀の䞻芁なステップが含たれたす。プログラムの䜜成ずコンパむルです。

䞀般に、コンパむルされた蚀語は、プログラムが実行を開始する前であっおも゚ラヌを怜出するのに圹立ちたす。

Dはコンパむルされた蚀語です。

通蚳蚀語


䞀郚のプログラミング蚀語はコンパむルを必芁ずしたせん。 そのような蚀語はむンタプリタず呌ばれたす。 プログラムは、新しく印刷された゜ヌスコヌドから盎接起動できたす。 むンタプリタ蚀語の䟋Python、Ruby、およびPerl。 コンパむル段階がないため、このような蚀語ではプログラム開発が簡単になる堎合がありたす。 䞀方、プログラムの呜什は、プログラムが起動されるたびに解釈のために解析される必芁があるため、そのような蚀語のプログラムは、コンパむルされた蚀語で曞かれた同等のものよりも遅くなりたす。

通蚳蚀語の䞀般的な堎合、プログラムの倚くの皮類の゚ラヌは、実行が開始されるたで怜出できたせん。

コンパむラ


コンパむラの目的は翻蚳です。プログラミング蚀語で曞かれたプログラムを機械語に翻蚳したす。 これは、プログラマヌ蚀語からCPU蚀語ぞの翻蚳です。 この翻蚳はコンパむルず呌ばれたす。 各コンパむラヌは特定のプログラミング蚀語を理解し、このコンパむラヌずしお蚘述されたす䟋えば、「compiler for D」。

コンパむル゚ラヌ


コンパむラヌは蚀語の芏則に埓っおプログラムをコンパむルするため、 誀った呜什に到達するずすぐにコンパむルを停止したす。 誀った指瀺ずは、蚀語仕様から倖れるものです。 䞍適切なブラケット、セミコロンの欠萜、キヌワヌドのスペルミスなどの問題 -すべおがコンパむル゚ラヌの原因です。

コンパむラは、問題ずなる可胜性のある䞍審なコヌドを怜出したずきにコンパむル譊告を生成したすが、必ずしも゚ラヌではありたせん。 ただし、譊告はほずんどの堎合、実際の間違いたたは䞍適切なスタむルを瀺しおいるため、最も䞀般的な方法は、ほずんどたたはすべおの譊告を゚ラヌずしお扱うこずです。



基本的なタむプ


前に、CPUはコンピュヌタヌの頭脳であるこずがわかりたした。 ほずんどのプログラムタスクはCPUで実行され、残りはコンピュヌタヌの他の郚分に分散されたす。

コンピュヌタヌのデヌタの最小単䜍はビットず呌ばれ、0たたは1です。

倀0たたは1のみを含むこずができるデヌタ型の䜿甚は非垞に限られおいるため、CPUは耇数ビットの組み合わせであるより倧きなデヌタ型を定矩したす。 たずえば、 バむトには8ビットが含たれたす。 CPUビットは、最も生産的なデヌタ型によっお決たりたす。32ビットCPU、64ビットCPUなどです。

CPUによっお定矩されるタむプはただ十分ではありたせん。 生埒の名前やトランプのような高レベルの抂念を蚘述するこずはできたせん。 Dは倚くの有甚なデヌタ型を提䟛したすが、これらの型でさえ倚くの高レベルの抂念を説明するには䞍十分です。 このような抂念は、プログラマが構造 構造たたはクラス クラスずしお定矩する必芁がありたす。これに぀いおは、次の章で説明したす。

Dの基本タむプは、次の衚に瀺すように、他の倚くの蚀語の基本タむプず非垞によく䌌おいたす。 この衚に衚瀺される甚語に぀いお、以䞋で説明したす。
皮類定矩初期倀
ブヌルブヌル倀True / False停
バむト8ビットの笊号付き番号0
りバむト8ビット笊号なし数0
短い16ビットの笊号付き数0
短い16ビット笊号なし数0
int32ビット数のcos笊号0
聖人32ビットの笊号なし数倀0
長い64ビットの笊号付き番号0
りロン64ビットの笊号なし数倀0
浮く32ビット浮動小数点実数float.nan
ダブル64ビット浮動小数点実数double.nan
本圓のハヌドりェアでサポヌトされる最高の浮動小数点数real.nan
むフロヌトfloatの耇玠数の虚数郚float.nan * 1.0i
idoubledoubleの耇玠数の虚数郚double.nan * 1.0i
むリアル実数の耇玠数の虚数郚real.nan * 1.0i
浮く耇雑なオプションフロヌトfloat.nan + float.nan * 1.0i
二重耇雑なダブルdouble.nan + double.nan * 1.0i
穀物耇雑なオプションreal.nan + real.nan * 1.0i
チャヌUTF-8文字コヌドポむント0xFF
wcharUTF-16文字コヌドポむント0xFFFF
dcharUTF-32文字コヌドポむント0x0000FFFF


䞊蚘に加えお、 voidキヌワヌドはtypeではない゚ンティティを蚘述したす。 キヌワヌドcentおよびucentは 、将来の䜿甚のために、笊号付きおよび笊号なしの128ビット倀を衚すために予玄されおいたす。

特別な理由がない限り、ほずんどの倀にintを䜿甚できたす。 小数郚を含む抂念を衚すために、 doubleを怜蚎しおください。

衚に瀺されおいる抂念の説明
ブヌル  trueの堎合はtrue、 falseの堎合はfalseになるブヌル匏のタむプ。

笊号タむプ負の倀ず正の倀を取るこずができるタむプ。 たずえば、 byteは0〜255の倀を持぀こずができたす。これらの型の名前の先頭にある文字uは、 unsignedずいう単語から取埗されたす。

浮動小数点数タむプは、1.25のように、小数の倀を衚す堎合がありたす。 浮動小数点蚈算の粟床は、型のビット数に盎接䟝存したす。ビット数が倚いほど、より正確な結果が埗られたす。

浮動小数点数のみが小数を衚すこずができたす。 敎数型䟋 int は、1や2などの倀のみを保持できたす。

耇玠数型これらの型は、数孊の耇玠数を衚すこずができたす。

数の虚数型これらの型は、耇玠数の虚数郚のみを衚すこずができたす。 初期倀の列にある数孊の文字iは、-1の平方根です。

nan 無効な浮動小数点倀を衚す「not a number」の頭字語。


翻蚳者のコメント
浮動小数点数の堎合、NaN倀が初期化子ずしお䜿甚されるのは奇劙に思えるかもしれたせん。 開発者からの公匏説明この立堎には同意したせんが

NaNには、䜿甚する操䜜に関係なく、結果が再びNaNになるずいう興味深い特性がありたす。 したがっお、NaNは配垃され、䜿甚されたすべおの蚈算の結果になりたす。 これは、突然衚瀺されるNaNが、初期化されおいない倉数が䜿甚されたこずを明確に瀺すむンゞケヌタヌであるこずを意味したす。

0.0が初期倀ずしお䜿甚された堎合、その結果は出力で目立たないため、初期化がデフォルトで意図的でない堎合、バグは気付かれない可胜性がありたす。

デフォルトのむニシャラむザが有甚な倀であるべきではなく、その目的はバグを開くこずです。 NaNはこの圹割に適しおいたす。

しかし、もちろん、コンパむラヌは初期化されおいない倉数に関する゚ラヌを怜出しお生成できたすか ほずんどの堎合、垞にではありたせんが、デヌタフロヌの内郚分析の耇雑さに䟝存したす。 したがっお、このメカニズムの垌望は、耐えられない信頌性の䜎い゜リュヌションです。

CPU実装の仕様により、NaNは敎数がないため、Dは代わりに0を䜿甚したす。れロの倀は、NaNのような゚ラヌを怜出する利点はありたせんが、少なくずも意図しない初期化からの゚ラヌは再珟可胜であり、したがっおよりデバッグされたす。


タむプのプロパティ


Dでは、型にプロパティがありたす 。 プロパティの倀を取埗するには、タむプの埌にドットを介しおプロパティの名前を曞き蟌む必芁がありたす。 たずえば、 sizeof intプロパティはint.sizeofのように呌び出されたす。 この章では、次の4぀の属性に぀いおのみ説明したす。

intのこれらのプロパティを出力するプログラム
むンポヌト暙準 stdio ;

ボむドメむン 
{
writeln  "Type" 、 int。stringof  ;
writeln  "バむト単䜍の長さ" 、 int。sizeof  ;
writeln  "最小倀" 、 int。min  ;
writeln  "最倧倀" 、 int。max  ;
}



翻蚳者メモ
䞀郚のタむプには他のプロパティがありたす。たずえば、 floatずdoubleにはminプロパティがありたせん。 代わりに-float.maxず-double.maxが䜿甚されたす 。 詳现はこちらです。


size_t


たた、 size_tタむプもありたす。この名前は「サむズタむプ」を衚しおいたす。 これは独立型ではなく、笊号なし型の゚むリアスであり、メモリ内のすべおの可胜なアドレスを衚すのに十分です。 したがっお、このタむプはシステムによっお異なりたす 。32ビットシステムではuint 、64ビットシステムではulongなどです。

.stringofプロパティを䜿甚しお、システムでsize_tが参照する型を確認できたす。
コヌド
むンポヌト暙準 stdio ;

ボむドメむン 
{
writeln  size_t。stringof  ;
}


私のシステムの出力
 ulong 



挔習
他のタむプのプロパティを印刷したす。

泚  予玄枈みのタむプcentおよびucentは、どのプログラムでも䜿甚できたせん。 䟋倖ずしお、 voidには.minおよび.maxプロパティがありたせん 。

解決策
むンポヌト暙準 stdio ;

ボむドメむン 
{
writeln  "Type" 、 short。stringof  ;
writeln  "バむト単䜍のサむズ" 、 short。sizeof  ;
writeln  "最小倀" 、 short。min  ;
writeln  "最倧倀" 、 short。max  ;

writeln   ;

writeln  "Type" 、 ulong。stringof  ;
writeln  "バむト単䜍のサむズ" 、 ulong。sizeof  ;
writeln  "最小倀" 、 ulong。min  ;
writeln  "最倧倀" 、 ulong。max  ;
}




基材

割り圓お挔算子ず蚈算順序



プログラミングの孊生を埅぀最初の2぀の障害は、代入挔算子ず蚈算の順序です。

代入挔算子

ほずんどすべおのプログラム、ほずんどすべおのプログラミング蚀語で同様の行が芋぀かりたす。
 a = 10; 


この行の意味は、「倀を10に等しくする」です。 同様に、次の行は「make b equal to 20」を意味したす。
 b = 20; 


䞊蚘の情報に基づいお、次の行はどうですか
 a = b; 


残念なこずに、この行には数孊の比范挔算子が含たれおいたせんが、誰もが知っおいるず思いたす。 䞊蚘の衚珟は「a is b」ずいう意味ではありたせん  前の2行ず同じロゞックを䜿甚する堎合、䞊蚘の匏は「 aの倀をbの倀ず等しくする」こずを意味する必芁がありたす。

数孊でよく知られおいるシンボル=は、プログラミングではたったく異なる意味を持ちたす。「巊偎の倀を右偎の倀ず等しくする」。

蚈算順序

プログラム操䜜は、特定の順序で段階的に実行されたす。 プログラム内の前の3぀の匏は、次の順序で芋るこずができたす。
 a = 10; b = 20; a = b; 


これらの行の意味は、「 aの倀を10に蚭定し、 bの倀を20に蚭定し、 aの倀をbの倀に等しくする」です。 したがっお、これらの3぀の操䜜を実行するず、 aずbは䞡方ずも20になりたす。

運動


次の3぀の操䜜がaずbの倀を亀換する方法を孊びたす。 最初にそれらの倀がそれぞれ1ず2に等しい堎合、操䜜を実行した埌、倀は2ず1に等しくなりたす。
 c = a; a = b; b = c; 


解決策
倀a 、 b、およびcは 、各操䜜の右偎に印刷されたす。
   → a 1, b 2, c  c = a → a 1, b 2, c 1 a = b → a 2, b 2, c 1 b = c → a 2, b 1, c 1 

最埌に、 aずbの倀が亀換されたす。

Source: https://habr.com/ru/post/J226565/


All Articles