|
1 | | -# 3.1 Hello, traP! の解説 |
| 1 | +# 3.1 Hello, traP!の解説 |
2 | 2 |
|
3 | | -おさらい:第1章のコード |
| 3 | +## 3.1.1 全体像 |
4 | 4 |
|
5 | | -<<<@/cpp/chapter-3/hello-world.cpp{cpp:line-numbers} |
| 5 | +まずは、第2章の最後に登場したプログラムをおさらいしよう。 |
6 | 6 |
|
7 | | -1行目から順に、まずは「用語」を説明していく。 |
8 | | -新しい単語がどんどん出てくるが、単語の説明は 3.1.1. 以降で行う。今は単語を頭の片隅に入れておくレベルで良いだろう。 |
| 7 | +1行目から順に、まずは「用語」を説明していく。 |
| 8 | +新しい単語がどんどん出てくるが、単語の説明は3.1.2以降で行う。今は単語を頭の片隅に入れておくレベルで良いだろう。 |
9 | 9 |
|
10 | | -```cpp:no-line-numbers |
11 | | -#include <iostream> |
12 | | -``` |
| 10 | +<<< @/cpp/chapter-3/Hello-traP.cpp{1 cpp:line-numbers} |
13 | 11 |
|
14 | | -`iostream` と呼ばれるファイルを「インクルード」している。 |
| 12 | +`iostream`と呼ばれるファイルを「**インクルード**」している。 |
15 | 13 |
|
16 | | -```cpp:no-line-numbers |
17 | | -using namespace std; |
18 | | -``` |
| 14 | +<br> |
19 | 15 |
|
20 | | -`std::` を省略できるようにする。 |
| 16 | +<<< @/cpp/chapter-3/Hello-traP.cpp{2 cpp:line-numbers} |
21 | 17 |
|
22 | | -```cpp |
23 | | -int main() { |
24 | | -``` |
| 18 | +`std::`を省略できるようにする。 |
25 | 19 |
|
26 | | -`main` という名前の「関数」を宣言している。 |
27 | | -プログラムは、ここから実行される。 |
| 20 | +<br> |
28 | 21 |
|
29 | | -```cpp:no-line-numbers |
30 | | - cout << "Hello, traP!" << endl; |
31 | | -``` |
| 22 | +<<< @/cpp/chapter-3/Hello-traP.cpp{4 cpp:line-numbers} |
32 | 23 |
|
33 | | -コンソールに `Hello traP!` を出力する。 |
34 | | -`"` で囲うのは、これが文字列なのか、命令なのかを区別するため。(`VSCode`を使っていれば `"Hello traP!"` |
35 | | -の部分だけ色分けされているはず。) `endl` についても 3.1.2. で解説する。 |
| 24 | +`main`という名前の「**関数**」を定義している。プログラムはここから実行される。 |
36 | 25 |
|
37 | | -```cpp:no-line-numbers |
38 | | - // Hello, traP を出力する |
39 | | -``` |
| 26 | +<br> |
40 | 27 |
|
41 | | -コメントを書いている。 |
| 28 | +<<< @/cpp/chapter-3/Hello-traP.cpp{5 cpp:line-numbers} |
42 | 29 |
|
43 | | -```cpp:no-line-numbers |
44 | | -} |
45 | | -``` |
| 30 | +コンソールに`Hello, traP!`を「**出力**」する。 |
| 31 | + |
| 32 | +`"`で囲うのは、これが文字列なのか、命令なのかを区別するため。(VSCodeを使っていれば`"Hello, traP!"`の部分だけ色分けされているはず。) |
| 33 | + |
| 34 | +`endl`については3.1.3で解説する。 |
| 35 | + |
| 36 | +<br> |
| 37 | + |
| 38 | +<<< @/cpp/chapter-3/Hello-traP.cpp{6 cpp:line-numbers} |
| 39 | + |
| 40 | +「**コメント**」を書いている。 |
| 41 | + |
| 42 | +<br> |
| 43 | + |
| 44 | +<<< @/cpp/chapter-3/Hello-traP.cpp{7 cpp:line-numbers} |
46 | 45 |
|
47 | 46 | 波括弧を閉じている。 |
48 | 47 |
|
49 | | -## 3.1.1. コメント |
| 48 | +## 3.1.2 コメント |
50 | 49 |
|
51 | | -<<<@/cpp/chapter-3/hello-world.cpp{6 cpp:line-numbers} |
| 50 | +<<< @/cpp/chapter-3/Hello-traP.cpp{6 cpp:line-numbers} |
52 | 51 |
|
53 | | -`//` と書くと、その行の `//` 以降の部分はコメントになり、プログラム実行時には無視される。 |
| 52 | +`//`と書くと、その行の`//`以降の部分はコメントとなる。すなわち、プログラム実行時には無視され、無いものとして扱われる。 |
54 | 53 |
|
55 | 54 | ::: tip |
56 | | -プログラムの先頭に `//` を付けてコメントにする事をコメントアウトする、と呼ぶことがある。 |
| 55 | +プログラムの先頭に`//`を付けてコメントにする事をコメントアウトする、と呼ぶことがある。 |
57 | 56 | ::: |
58 | 57 |
|
59 | | -プログラムがどのような動作をするのか、どういう目的のプログラムなのか、を簡易的に記述すると良い。見たら分かるというレベルになれば、コメントを書く必要はない。 |
| 58 | +プログラムがどのような動作をするのか、どういう目的のプログラムなのか、を簡潔に記述すると良い。見たら分かるというレベルになれば、コメントを書く必要はない。 |
| 59 | + |
| 60 | +## 3.1.3 cout |
| 61 | + |
| 62 | +<<< @/cpp/chapter-3/Hello-traP.cpp{5 cpp:line-numbers} |
| 63 | + |
| 64 | +`cout`は値を出力するための仕組みである。`<<`を使って値を渡すと、その値が文字として画面に表示される。文字列を出力するときは、命令と区別するため、`"`で文字列を囲むようにする。 |
| 65 | + |
| 66 | +このプログラムを実行すると、ターミナルに次のように出力される。 |
60 | 67 |
|
61 | | -## 3.1.2. cout |
| 68 | +```Output:line-numbers |
| 69 | +Hello, traP! |
| 70 | +``` |
62 | 71 |
|
63 | | -<<<@/cpp/chapter-3/hello-world.cpp{5} |
| 72 | +(Code Runnerを使ってプログラムを実行すると、他にもいろいろなものが表示されるかもしれないが、今は気にしなくて良い。) |
64 | 73 |
|
65 | | -`cout` はコンソール(画面)に文字列を出力する命令である。C++特有の記法で、 `<<` が ← みたいなものだと考えると良い。`cout` |
66 | | -に向かって文字列を送信しているイメージ。複数つなげることもできる。(以下の例を参照) |
| 74 | +`<<`は、複数つなげることもできる。例えば、以下のように書いても出力は変わらない。 |
67 | 75 |
|
68 | | -```cpp:no-line-numbers |
| 76 | +```cpp:line-numbers=4 |
69 | 77 | cout << "Hello, " << "traP!" << endl; |
70 | 78 | ``` |
71 | 79 |
|
72 | | -また、`endl` は改行の命令を意味する。 |
| 80 | +`endl`と書くと、出力は改行される。例えば、プログラムを次のように書き換えてみる。 |
73 | 81 |
|
74 | | -:::: tip エスケープシーケンス |
| 82 | +```cpp:line-numbers=4 |
| 83 | + cout << "Hello, " << endl << "traP!" << endl; |
| 84 | +``` |
75 | 85 |
|
76 | | -出力に `"` を含めたい場合、 `cout << "Hello, "traP"!" << endl;` と記述してもコンパイルができない。これは `"Hello, "` で文字列が区切られてしまっているためである。 |
77 | | -これを回避するために、(Windows: ¥ キー, Mac: Option (⌥) キーを推しながら ¥ キー) `\` という文字を使って `\"` と書くことで、 `"` を出力することができる。 |
78 | | -このように `\` を使った文字の出力の仕方をエスケープシーケンスと呼ぶ。 |
| 86 | +すると、出力は次のように変わる。 |
79 | 87 |
|
80 | | -```cpp:no-line-numbers |
81 | | - cout << "Hello, \"traP\"!" << endl; // output: Hello, "traP"! |
| 88 | +```Output:line-numbers |
| 89 | +Hello, |
| 90 | +traP! |
82 | 91 | ``` |
83 | 92 |
|
84 | | -他にも以下 `Hello, \n traP!` のように文字列中に `\n` と書くと改行され、この場合は `"Hello, "`と`"traP!"` の間に改行が入る。 |
| 93 | +::: tip エスケープシーケンス |
| 94 | + |
| 95 | +出力に`"`を含めたい場合、`cout << "Hello, "traP"!" << endl;`と記述してもコンパイルができない。これは`"Hello, "`で文字列が区切られてしまっているためである。 |
| 96 | +これを回避するために、`\`という文字を使って`\"`と書くことで、`"`を出力することができる。 |
| 97 | + |
| 98 | +このように`\`を使った文字の出力の仕方をエスケープシーケンスと呼ぶ。 |
85 | 99 |
|
86 | | -``` cpp:no-line-numbers |
| 100 | +`\`は、Windowsであれば`¥`キーを押すことで、Macであれば`Option(⌥)`キーを押しながら`¥`キーを押すことで入力できる。 |
| 101 | + |
| 102 | +```cpp:line-numbers=4 |
| 103 | + cout << "Hello, \"traP\"!" << endl; // 「Hello, "traP"!」と出力される |
| 104 | +``` |
| 105 | + |
| 106 | +他にも`Hello, \ntraP!`のように文字列中に`\n`と書くと改行ができる。 |
| 107 | + |
| 108 | +``` cpp:line-numbers=4 |
87 | 109 | cout << "Hello, \ntraP!" << endl; |
88 | 110 | ``` |
89 | 111 |
|
90 | | -```txt |
91 | | -[output] |
| 112 | +この場合は`Hello, `と`traP!`の間に改行が入り、出力は以下のようになる。 |
| 113 | + |
| 114 | +```Output:line-numbers |
92 | 115 | Hello, |
93 | 116 | traP! |
94 | 117 | ``` |
95 | 118 |
|
96 | | -また、`\`を文字列内で使いたい場合は、`\\` と書く。 |
| 119 | +また、`\`を文字列内で使いたい場合は、`\\`と書く。文字列中では、`//`と書いてもコメントアウトされない。 |
97 | 120 |
|
98 | | -```cpp:no-line-numbers |
99 | | - cout << "\\\\ Hello, traP!! //" << endl; |
| 121 | +```cpp:line-numbers=4 |
| 122 | + cout << "\\\\ Hello, traP!! //" << endl; // 「\\ Hello, traP!! //」と出力される |
100 | 123 | ``` |
| 124 | +::: |
101 | 125 |
|
102 | | -```txt |
103 | | -[output] |
104 | | -\\ Hello, traP!! // |
105 | | -``` |
| 126 | +## 3.1.4 セミコロン |
| 127 | + |
| 128 | +C++では、`;`(セミコロン)を多用する。`;`は「命令の区切り」を示す。C++においては、関数を呼び出すときや、「変数」の定義時など、各命令の終わりには`;`を記述しなければならない。 |
106 | 129 |
|
107 | 130 | ::: tip |
108 | | -文字列中では `//` を書いてもコメントアウトされない。 |
| 131 | +最終的にはコンピューターが機械語に変換する必要があり、その際に命令の区切りをはっきりさせるために`;`を使うと考えると良い。 |
109 | 132 | ::: |
110 | 133 |
|
111 | | -:::: |
| 134 | +## 3.1.5 include命令 |
112 | 135 |
|
| 136 | +<<< @/cpp/chapter-3/Hello-traP.cpp{1 cpp:line-numbers} |
113 | 137 |
|
114 | | -## 3.1.3. セミコロン |
| 138 | +`#include`は、外部の関数(やその他もろもろ)が実装されているファイルを取り込んで、使えるようにする命令である。 |
115 | 139 |
|
116 | | -C++では、`;` を多用する。`;` は「命令の区切り」を示す。C++ |
117 | | -においては、関数を呼び出すときや、次に出てくる「変数」の宣言時など、各命令の終わりには `;` を記述しなければならない。 |
| 140 | +このプログラムでは`iostream`と呼ばれるファイルをインクルードしている。これは入出力に関する便利な関数(など)が用意されているファイルである。例えば、`cout`は`iostream`に含まれているものの一つである。 |
118 | 141 |
|
119 | | -::: tip |
120 | | -最終的にはコンピューターが機械語に変換する必要があり、その際に命令の区切りをはっきりさせるために `;`を使うと考えると良い。 |
121 | | -::: |
| 142 | +自分一人で一から作る事は非常に難しいので、予め用意されたプログラムを適宜用いてプログラミングをするのである。 |
122 | 143 |
|
123 | | -## 3.1.4. include命令 |
| 144 | +## 3.1.6 using namespace std |
124 | 145 |
|
125 | | -<<<@/cpp/chapter-3/hello-world.cpp{1 cpp:line-numbers} |
| 146 | +<<< @/cpp/chapter-3/Hello-traP.cpp{2 cpp:line-numbers} |
126 | 147 |
|
127 | | -`#include` は、外部の関数(やその他もろもろ)が実装されているファイルを取り込んで、使えるようにする命令である。 |
| 148 | +これまで出力を`cout`と記述してきたが、これは本来ならば`std::cout`と書く必要がある。(`std::`が何を意味しているかは深くは解説しないがstdがstandardの略であることくらいは知っておいても良いだろう。)毎回`std::`と書かなければいけないのは少し不便なので、これを書かない(省略する)という宣言をしている。 |
128 | 149 |
|
129 | | -このソースコードでは `iostream` |
130 | | -と呼ばれるファイルをインクルードしている。これは入出力に関する便利な関数(など)が用意されているファイルである。具体的には、 `cout` |
131 | | -が `iostream` に含まれている。 |
| 150 | +## 3.1.7 main関数 |
132 | 151 |
|
133 | | -自分一人で一から作る事は非常に難しいので、予め用意されたソースコードを適宜用いてプログラミングをするのである。 |
| 152 | +<<< @/cpp/chapter-3/Hello-traP.cpp{4 cpp:line-numbers} |
134 | 153 |
|
135 | | -## 3.1.5. using namespace std |
| 154 | +プログラムは実行されるとき、このmain関数から実行が始まる。すなわち、main関数の中身がプログラムの最も主な処理であると捉えても良い。「関数」についての詳細は第7章で扱う。 |
136 | 155 |
|
137 | | -<<<@/cpp/chapter-3/hello-world.cpp{2 cpp:line-numbers} |
| 156 | +したがって、**main関数はプログラム中にただ1つ存在していなければならない**。main関数が無かったり、複数個存在していたりしてはいけない。 |
138 | 157 |
|
139 | | -`cout` と記述しているが、本来ならば `std::cout` と書く必要がある。 `std::` が何を意味しているかは深くは解説しないが(std = |
140 | | -standard くらいは知っても良いだろう)、毎回`std::`と書くのは少し不便なので、これを書かない(省略する)という宣言をしている。 |
| 158 | +プログラムの中で`int main()`の後の`{`と、最終行の`}`は対応していて、`{}`の内側がmain関数の内容である。今のところは、「**main関数の`{`と`}`の間に処理を書く**」と思っていれば十分である。 |
141 | 159 |
|
142 | | -## 3.1.6. main関数 |
| 160 | +## 3.1.8 インデント |
143 | 161 |
|
144 | | -<<<@/cpp/chapter-3/hello-world.cpp{4 cpp:line-numbers} |
| 162 | +プログラムが長くなってくると、`{}`が何個も入れ子になって出てくるようになる。そこで、`{`が1つ始まるごとに、インデント(字下げ)を行う。すなわち、各行の最初に空白を入れる。 |
145 | 163 |
|
146 | | -コンピューターはmain関数を実行する。main関数の中身がプログラムのメインの部分と捉えても良い。 |
147 | | -「関数」についての詳細は5章で扱う。 |
| 164 | +以下は、第4章で学ぶif文を用いたプログラムである。今はまだ意味を理解する必要はないが、`{`が始まるごとに行頭の半角スペースが2つずつ増えていることがわかるだろう。VSCodeなどのエディタであれば、こうした作業はある程度自動で行ってくれる。 |
148 | 165 |
|
149 | | -ソースコードの中で `int main()` の後の `{` と、最終行の `}` は対応していて、 `{ }` の内側が main |
150 | | -関数の内容である。 |
| 166 | +```cpp:line-numbers |
| 167 | +#include <iostream> |
| 168 | +using namespace std; |
151 | 169 |
|
152 | | -今のところは、「`{` からプログラムが始まって、末尾の`}` で終わる」と考えれば十分である。 |
| 170 | +int main() { |
| 171 | + cout << "点数を入力してください。" << endl; |
| 172 | + int score = 0; |
| 173 | + cin >> score; |
| 174 | +
|
| 175 | + if (score >= 60) { |
| 176 | + cout << "合格です。" << endl; |
| 177 | + } |
| 178 | + if (score < 60) { |
| 179 | + cout << "不合格です。" << endl; |
| 180 | + } |
| 181 | +} |
| 182 | +``` |
0 commit comments