僕の後輩に、C++を教えてくれと言われて教えたことがあります。
教えたとき、参考書を見て、わからないところを教えていたのですが、参考書の記述上わかりにくいところが多々あったのです。
初心者だから気づくこともあるんですね。
そんなときのための、講座、というか、ここには気を付けて覚えろよ?ってものです。
ではでは、始めましょう。
※実際にあった話をアレンジしています。
後輩A,後輩B,僕が登場します。
(´Д`),<-後輩A
( ゚д゚ )<-後輩B
" 'ζ_,`"<-僕(うざい顔してますねw)
[1]制御文の落とし穴?
(´Д`) 「なんで、while(true){~~}って無限ループになるんですか?」
" 'ζ_,`"「そりゃあ、trueだからだろう」
( ゚д゚ )「でも、本には、while(条件式){~~~}って書いてありますよ?trueって条件式じゃなくて値じゃないんですか?」
" 'ζ_,`"「意味的に考えてみよう。trueって日本語訳で真、falseって日本語訳で偽。つまり、trueというのは、正しい。falseというのは正しくない。という意味だね。条件式は、正しいときはtrue、間違っているときはfalseを返すと考えたらわかるかな?」
( ゚д゚ )「ってことは、whileって()の中身がtrueなのか、falseなのかを見ているんですね。」
(´Д`)「本の条件式って記述だけではわかりにくいな。多くの解説サイトでも、if(条件式){~~~}とか、while(条件式){~~~}ってなってますね。」
" 'ζ_,`"「そうだね。注意しなきゃいけないね。当たり前の話だと思っている人も多いだろうからね。」
( ゚д゚ )「ということは、if(true){~~~}なら、かっこの中が絶対に実行され、while(false){~~~}なら、かっこの中が絶対に実行されないんですね。」
" 'ζ_,`"「そうだよ。だけど、それって条件分岐とも、ループとも言わないんじゃないか?」
( ゚д゚ )「・・・・」
[2]三項演算子って?
( ゚д゚ )「なんか、プログラム中に?とかなんか出てきてるんですけど・・・」
" 'ζ_,`"「あの、それだけじゃ俺が?なんだけど・・・」
(´Д`)「あ~、なんか俺の本には書いてあったよ。三項演算子でしょ?」
" 'ζ_,`"「そういうことか。確かに、解説書によっては乗ってなかったりよくある話だよな。でも、お前ら日頃俺のソース見てるから、よく見てたはずだろ?」
( ゚д゚ )「見ても、理解できない。コメント挟めし。」
" 'ζ_,`"「・・・ごめんなさい」
( ゚д゚ )「んで、結局?なんなの、このサンコウエンザンシって?しっかり説明してもらえる?」
" 'ζ_,`"「は、はい。わかりました。(汗)」
「三項演算子は、?演算子と、:演算子を利用するよ。 真か偽(条件式) ? 結果A:結果Bという文法を使うよ。条件式側が、真ならば結果A,偽ならば結果Bを返すんだ。
つまり、そうだなぁ、ifの代わりみたいな使われ方だね。
だけど、読みにくくなるから、使わなくてもいいよ」
(´Д`)「読みにくくなるのに使うなんて優しくないですね。ドS~~」
" 'ζ_,`"「教えてる時点で、優しいじゃないか。」
( ゚д゚ )「先輩として当たり前でしょ~」
" 'ζ_,`"「はいはい、すいませんね」
[3]メモリリーク(・∀・)
" 'ζ_,`"「さて、君らもずいぶん発達したね。」
( ゚д゚ )「ずいぶん、時間割きましたからね。おかげで試験壊滅的でしたけど、どうしてくれるんですか?」
(´Д`)「そんなことこの人に言っても仕方ないぞ、お前とは違ってalways壊滅的なんだから。」
" 'ζ_,`"「悪かったな。んで、なんか聞きたいことがあると言ったね。」
( ゚д゚ )「メモリリークってどんな時に起きますか?」
" 'ζ_,`"「動的に確保したメモリを解放できないときだね。」
(´Д`)「そのほかには?」
" 'ζ_,`"「ん?メモリリークの定義がそれなんだからそれしかないんだよ。」
( ゚д゚ )「でも、確保したメモリはOSが後処理してくれるんじゃないんですか?」
" 'ζ_,`"「動的確保した領域は、必ずdeleteしないとダメだよ。クセつけとくといいよ。」
( ゚д゚ )「ちゃんとdeleteしてますよ。ナメるなし」
" 'ζ_,`"「ん~?delete二回呼び出したりとかしてない?」
( ゚д゚ )「え、ダメなの?deleteは多い分には大丈夫かなって思って・・・」
" 'ζ_,`"「まあ、参考書とかには必ずdeleteしましょうとしか書かれてないもんね。」
(´Д`)「死んだやつをもう一回殺すことはできないもんね。」
" 'ζ_,`"「そうだね。ほかにもいろいろメモリリークを起こす原因はあるはずだよ。チェックしようね。だけど、まず基本はどの変数がメモリリークしているのか探ることが最初だね。」
( ゚д゚ )「でも、ほっといてもエラー出ないしいいか。」
" 'ζ_,`"「プログラムが大きくなればなるほど、探すのが大変になってしまうよ。今のうちに捜しておくべきだな。」
(´Д`)「ざまぁ」
( ゚д゚ )「いいし、直すし」
" 'ζ_,`"「メモリリークは探すの大変だぞ~。俺は帰るから頑張ってな」
( ゚д゚ )「なあ、二人でdeleteしたらメモリリーク起こすかな?」
(´Д`)「何を?」
( ゚д゚ )「あいつ・・・」
以上、次回はリファレンスを読み解くコツについて話した時の話があります~
リファレンス読む力は非常に重要なので、是非読んでほしいです。
それでは、読んでくださりありがとうございました。
[3回]
PR