初学者の最大の敵!?色々な「省略」

初学者の最大の敵!?色々な「省略」

プログラミングのお話です。

ある程度プログラムに触った方なら感じていることと思いますが、
分からないことに出会ったら調べれば大抵のことは分かるようになります。
つまりプログラマーの勉強とは、ひたすらググることです。

しかし、プログラムには時折「省略」する書き方をされることがあります。
そしてそれが「省略」されていることに気づくことは初学者には難しく、
「省略」されているのでどうググればよいのか混乱してしまいます。
そうして何が分からないのかも分からない闇の中に迷い込んでしまいがちです。

今回はそんな「省略」の例として、
私が最近見かけたものを紹介していきます。

SQLの例

SQLには省略して書くテクニックがいくつもあります。
DBによっては違う内容があるかもしれませんのでご注意を。
それでは省略の例をば。


SELECT 表A.columnA1 AS 列1
, 表B.columnB1 AS 列2
FROM TABLE_A AS 表A
CROSS JOIN TABLE_B AS 表B


SELECT columnA1 列1
, columnB1 列2
FROM TABLE_A 表A
, TABLE_B 表B

この2つのSQLは全く同じ結果を出力します。
②は色々と省略されてスッキリして見えますね。
このSQLで省略されているのは赤字の部分で、
・列名が一意となる時のテーブル名を省略
・別名をつける時の「AS」を省略
・CROSS JOINをカンマ区切りに書き換え

をしています。
CROSS JOINはあまり見かけない結合方法かもしれませんが、
テーブルAの各行にテーブルBの各行を結合するというものです。
(n行のテーブルとm行のテーブルを結合するとn×m行になるイメージ)

C#の例

最近私がC#で書く仕事をしているためC#を例に出しますが、
他の言語にも同じような話は出てくると思います。

例としてDataTable型の扱いについてお話します。
表形式でデータを保持できるもので、
主にデータベースから取得したデータを格納して使われます。
もちろん列や行をコード内で追加することも出来ますが、
列を追加する時に1つ落とし穴があります。

DataTable dt = new DataTable();
dt.Columns.Add(“列名1”, string);
dt.Columns.Add(“列名2”);

列名と、その列に入る値の型を指定して追加するのですが、
型を省略した場合はstring型(文字列)となります。
そして最大の罠はここに数値型を代入してもエラーにはならず、
その後の処理で動いたり動かなかったりする
ことです。
そのため動かなかった時のエラーは直接的でないことが多く、
ヒントの少ない間違い探しをすることになります。

まとめ

全く同じ動作になるなら、
省略しないで書く方が正義かと思います。
書くのが楽で見た目もスッキリしていますが、
他の人が処理を追ったり修正する難易度が上がり逆に工数がかかるからです。
(個人の体感ですが)
ただし、例にも挙げたCROSS JOINをCROSS JOINと書いているSQLを見たことがないので、
省略するしないの空気読みをしながら色んなコードを見て慣れるしかなさそうです。