2015の12月24日の記事です。昨日の担当はhmitoさんでした。www.adventar.orgqiita.comこの記事はプログラミング始めたい・始めたばかりでとりあえずC++っていうのがやりたいけど難しすぎて進まない...って人向けにありえないくらいわかりやすく全てを解説する記事です(大げさ)。(追記:時間が足りなかったのでにゃーんプログラムの説明だけで終わってしまった)。いいクリスマスプレゼントになればなと思います。mainとかなんなの?関数?なにこれ数学?数学嫌いなんだけど返り血って怖っ...何それ...なんでmain関数氏int返してくんの?0って?なんかわかったような...そういえばcoutとかは結局なんだったのへーそう。std::ってついてるのはなんで?かっこつけ?std名前空間??なにその名前空間っていうのまた厨二病?なるほどね。world!っていう文章を表示するプログラムの書き方から教えると思います。なんじゃそりゃ、って感じだと思うので、変わりに「にゃーん」を表示するだけのプログラムから書いてみましょう。いうかまずソースコードをみせます。こちらが「にゃーん」を表示するだけのプログラムのソースコードです。実行結果が見たいと思うので、今回はオンラインでC++など色々な言語を試すことができるWandboxというサイトを利用します。画面下の黒い画面に「にゃーん」と表示されてれば成功です。http://melpon.org/wandbox/permlink/rLy6NfSgdkF0Zxo7どういうことにゃの?さて、さっきのソースコードだけ出されてもよくわからないと思うので解説するよ!まずは最初の行ね。<iostream>この行をそのまま説明すると、「標準ライブラリのiostreamをインクルードする」ということです。それを説明するのがだるいという理由で「おまじない」ということで済ませる入門書とかあるらしい。[要出典]標準ラブライブ?アニメの話??標準ライブラリね。便利なやつがあるのでせっかくなので使っちゃお!って感じ。囲まれてるのが標準でついてくるものではないライブラリです。いうのをつけてますよね。つけるべきというわけではありません。しても問題ないはずです。標準ライブラリには何もついていないのでそれと区別するためにつけるべきという感じですね。いうのはC言語のヘッダーファイルと区別するために使っています。)結局iostreamってどういう便利なやつなの、はやく教えてよごめんね。streamの略ですよ。日本語でおkってなるよね。(先ほどのソースコードもっかい確認したら使われてるのがわかるはず)。略で和訳すると整数ですね。メイン、主要のって感じですね。整数に関する主要の何かってなんだよ!って感じですよね。なんか()が最後についてるしなんなのと思うでしょう。返り値のmain関数です。関数?なにこれ数学?数学嫌いなんだけどごめんね。このmain関数、メインって名前がついてるくらいなのでC言語やC++では基本的にプログラムが実行されるときまずこのmain関数の中に書いてあることからはじまるんだよ。このmain関数を書かずに適当にそれっぽいコード書いてても上手く実行されないからまずこれを書きましょう。極端に言えばソースコードの全てをこのmainという関数の中で書けば一応動くけど、この中に1000行とか書かれてると他のプログラマさんがとてもおこになります。先ほどのライブラリの話でもありましたよね、便利なやつをわけてしまえば色々なプログラムにも使えたりして便利って。一つのプログラムの中でも書いていくうちに似た処理をする部分が何度も何度も出てくるはずです。いうときそのまっっっっったく同じ処理をひたすらコピペしてたら行数が増えるだけでスマートじゃないです。いうときは別の自分で作った関数に入れてあげると何度も書かずにすみます。C++で関数はこんな風に書きます。printNyan(){}関数の呼び出しはこんな感じ。printNyan();この事を踏まえてにゃーんプログラムのmain関数の中の処理を自前の関数にうつしてみましょう。ここから処理がはじまる。0;}Wandboxの結果はこの通りです(最初と同じですね)。http://melpon.org/wandbox/permlink/YvBYn0v6eqIJlav9返り血って怖っ...何それ...返り血ではなく返り値ね。返り値っていうのは返ってくる値なのですよ(まんま)。printNyan関数を呼ぶとvoidが返ってくる。main関数を呼ぶとintが返ってくる。voidってなんや!ってなりますよね。英語ネイティヴでもなります。いうのは「何もない」「無」って感じです。返り値がないときに使います!printNyan関数は「にゃーん」を表示させてくれますが、特に何も返さないのでvoidにしています。関数はint、つまり整数を返しています。この判別方法はmainの波かっこ({と}のことね)内を探せばわかります。いう英単語があります。いうのは英語で返すって意味なので、これにより返されるものがmain関数の返り値ということになります。整数なのでmain関数の返り値はintですね。なんでmain関数氏int返してくんの?0って?C++ではプログラムがまずmain関数を最初に実行するということを先ほど言ったけども、実は返り値もintで決まってるのです、僕がきまぐれでintと0を選んだわけじゃないよ!実はmain関数の処理が全部上手く行ったかどうかを返り値の整数で判別してるのです。大丈夫な場合は0、問題があった場合は0以外だとか。僕「だいじょーぶだって。ぶはー!!!!」(鼻血を出す)→返り値が血(ゼロ以外)なので異常終了ただまあ、返り値の種類は一つなので異常なときは血を返して、正常なときはvoidっていう具合にはちょっとできないので(どちらでも値は返す)、異常なときは例えば1を返して正常なときは0を返すとかすると思うよっ。なんかわかったような...そういえばcoutとかは結局なんだったのその行だけまだちゃんと説明していなかったね。演算子とセットで使って、基本的にはその右側にあるもの(この場合にゃーん)を出力してくれる便利なやつだよっ。stdはおそらくstandardの略です。日本語でいうと標準ね。あれ?聞き覚えが...。coutとかendlはiostreamライブラリから持ってきた便利なやつで、iostreamは標準ライブラリなのです。標準ライブラリの中の便利機能は基本的にstd名前空間というものの中にあるの。みたいにしてstd名前空間のcoutですよ〜って言わなきゃいけないわけっ。std名前空間??なにその名前空間っていうのまた厨二病?ごめんねよくわからないよね。C++書くとき、自分の好きな名前空間とか決めることができて、その中で色々機能を実装することによって他の人のライブラリと万が一名前が被ったとき衝突を防げるの。え、どういうことかって?んー、つまりだよ?僕が犬を飼っててポチって名付けたとして、C++の標準ライブラリにも万が一ポチという犬が居たとして、それをincludeするとどうなる?ポチを呼んだら、どっちの犬が駆けつけてくるの?わかんないよね。いうときのために、標準の犬はstd::ポチという名前にしてくれてると、識別ができて良いということです!(※標準ライブラリにポチはおろか、犬は居ません)なるほどね。演算子ってなに?見た目変じゃない?小なり小なり?それね、実は左シフト演算子っていうのだけど、今回の用途では左シフトとは関係がないんだよね。左シフトについて知りたい方は別でググってもらうとして、今回の例で左シフト関係ない理由というのは実は演算子のオーバーロードというものがされているからです。ん?まったく意味がわからない?ごめんね、説明する。書くのだけど、英単語だけでいうと普通よりも多めに積むというイメージです。12になるみたいな)。使ったら何をすればいいのかわからずエラー吐きます)。演算子がオーバーロードされているって感じですね!へぇー。́・_・`)実行結果をみるのがはやいかも。ここから処理がはじまる。0;}Wandboxの結果はこの通りです。三回表示されてますね。ここから処理がはじまる。0;}Wandboxの結果はこの通りです。三回表示されているけど改行がないですね。役割の1つは改行です。実は改行以外にflushということもしています。出力する場合、例えば出力先がファイルだったりすると一文字ずつそのファイルに書き込むのはとても時間の無駄なので、一旦溜め込んでいくような感じです。呼ぶと改行と一緒に出力先との同期もしてくれるのです。これによりちゃんと出力先ににゃーんが吐き出されます。いうのがちゃんとあります。まとめさて、時間の都合でここで終わりですがこの記事であなたはC++のこういうことを理解できるようになったっぽい[要出典]です。while文があるのでそれを使ってみるとか。あとは世界のナベ○ツ的なことをして、3の倍数と3のつくときだけ「わん」と出力させるようにするとか。if文とかつかえばいいかもしれない。クリスマスイブなのでケーキ食べて寝ましょう。