突っ込みどころ満載なのでちょっと茶々入れしてみようと思う。
その一つに,C言語は非常に自由度の高いコーディングができることが挙げられます。例えば,if-elseの処理を1行で記述できるC/C++の三項演算子は便利な機能ですが,よく見ないと処理内容がよくわかりません(リスト1)。
三項演算子って、C ではよく悪者にされるよね。おいらは値を代入するシーンや値を return
で返すシーンではそれなりに有用だと思っているし、演算順序が左→右であることから複合的な条件分岐も割と整理して記述できるという利点もあったりするんだけれども。
でも、確かに示されているコード例は、酷いね。せめて、
(msg[i] >= 'a' && msg[i] <= 'z') ? msg[i] += 'A' - 'a' : msg[i] -= 'A' - 'a';
なんて書かずに、
/* アルファベットの小文字なら大文字に、大文字なら小文字に置き換える */ msg[i] -= 'a' <= msg[i] && msg[i] <= 'z' ? 'a' - 'A' : 'A' <= msg[i] && msg[i] <= 'Z' ? 'A' - 'a' : /* アルファベット以外の場合 */ 0;
ぐらいには書いて欲しい。対応する if
〜else
構文も、ブレースなしにしてあげた方が公平じゃね?
だいたい、C/C++ の文脈でいうところの「自由度の高さ」に、三項演算子に代表されるようないわゆる言語の文法・構文仕様自体は無関係だ。ていうか、それを言うんだったらむしろ Perl なんかの方が「(記述の) 自由度の高さによる弊害」は大きい。
C/C++ で「自由度が高い」って言ったら、それは記述の自由度のことではなくて、動作として実現できることの自由度の高さのことを指すべきだ。そしてそれは、すなわちプログラマーが背負わなければならない責任の範囲が広い、ということでもある。メモリー管理やファイル管理なんかはその際たる例。まぁ、その辺のことについてはその後に「不親切さ」という言葉を用いて説明されているのではあるが。。。
ちなみに IOCCC ってお祭りを支えているのは C 言語の改行に対する自由さであるように思う。改行に対する自由がない BASIC の方がよっぽど汚いプログラムは出来上がりやすいように思うぞ。あ、でも Python は別格かも。
Part 2 でいきなり FAQ をもってくるという構成自体は割と良いと思う。
Q2: C/C++をこれから勉強するのはムダ? JavaとかC#のほうがいいの?
誕生から30年(C++の場合は22年)経った今でも,C/C++はプログラマならぜひともマスターしておきたい言語です。主に利用する言語がJavaや C#になるとわかっている人でも,少なくともCだけはマスターすることをお勧めします。JavaやC#を使う人でも,コンピュータとプログラムの仕組みはきちんと理解しておくべきだからです。Cはそのために最適なプログラミング言語なのです。
某氏がどこかで「プログラミングの入門には、アセンブリ言語こそ相応しい」とおっさられていたのを思い出したw。最も、アセンブリ言語がメモリーと CPU の両方の動作を管理しなければならないものであるのに対して、C 言語は CPU の動作についてはコンパイラがだいたい面倒を見てくれるという違いはありますが (register
宣言? あんなもんはヒントに過ぎんではないか)。
逆にいえば、コンピュータとそこまで深くお関わり合いになりたいとは思わない人にとっては、その説明では学習の動機付けにはならないわけで。。。まぁ、プロの技術者としてそれはどうなの? っていう人の気持ちも分からないではないんだけどね。個人的には、論理的に仕事をこなしてくれるんであれば、その辺についてはどっちでもいいです、って感じかな。。。
セコメントをする