ついこの間IOCCCというコンテストを知った、ユゲタです。
IOCCCというのは、「国際難読化Cコードコンテスト」の略で、できる限り意味のない見た目でC言語を書いて、そのフォルムを競うコンテストなのだそうです。
The International Obfuscated C Code Contest
検索すると、これまでのコンテストで賞をとった作品がたくさん出てきて、「こういうことか!」とその面白さに目を奪われてしまいました。
全体的にアスキーアート風にしているのが特徴ですね。
どれもコンパイルできるのが不思議なくらい面白くて、javascriptの難読化もこのくらいのクオリティがあればいいのに・・・と思っていたら、ありました。
国際難読javascriptコードコンテスト
でも、本家リンクがnot foundになるので、活動形態はゆるいみたいですね。
ちなみに、難読化コンテストは、「汚いコードコンテスト」とも言われているようです・・・なんか意味が違っている気もするが・・・
今回は、初心者では少し理解しづらいプログラミングについての話です。
本日のIT謎掛け
「難読化」と、かけまして・・・
「原材料を聞いてびっくりする、頑丈な家具」と、ときます。
そのココロは・・・
理解できるとカミ
とにかく短く書くことがプログラミングでは良しとされやすい
短いプログラミングコードは、スッキリとした見栄えと簡潔な印象で、なんとなく評価されやすいのですが、
ネストが浅いとか、無駄な繰り返しが無いというレベルではなく、極端に少ない文字で書かれたプログラムは、
実際に仕事で使う場合に理解するのに時間がかかり、現実的ではない場合も多々あります。
それでも、その書き方に慣れたほうがいい場合も少なくなく、プログラミングという作業が効率的になるという大きなメリットも存在します。
そうした難読化された、短縮コードは、それを読むプログラマーのスキルを判定する手段としても役立つ事が多く、企業の採用試験などに使うと効果的でしょう。
知ったら便利javascriptの便利演算子
大体、どのプログラム言語でも使える三項演算子は、効果的に使うと、非常にスッキリとしたプログラミングができますが、
javascriptには、それをさらに簡潔に書く方法もあり、知らないとコードが読めなくなりますが、使い慣れると便利で仕方がありません。
# 正の整数値の判定
var res = null;
if (a){
res = a;
}
else{
res = null;
}
(解説)a変数に値が入っている場合にres変数にその値を入れるが、そうでない場合はnullを代入する。※サンプルのelseは本当は不要
一般的にif文を使って上記のようなプログラムをする場合、三項演算子を使うと、宣言も含めて1行で書けてしまいます。
var res = a ? a : null;
どちらが効率的なのかは誰が見ても明らかですが、同じチーム内のプログラマーレベルに合わせて使い分けるといいでしょう。
これを、さらにjavascriptでは、以下のようにも書けます。
var null = a || null;
三項演算子と少し意味が違うのですが、変数に値を代入する時に、その値がない場合に、別の値を代入できるため、簡易なif文を書くよりも簡単に代入できます。
三項演算子をすべてこの書き方にできるわけではないので、違いを理解して使いましょう。
~~だけで少数点切り捨て演算処理
インクリメントやデクリメントなど、一般的によく使われている省略系演算子ですが、javascriptには、ちゃんとビット演算子も存在していて、他進数の扱いもできます。
※あまる使う人はいないと思いますが・・・
でも、これを使い慣れると非常に便利になることは、プログラマーなら、想像しやすいと思います。
僕もつい最近まで知らなかったんですが、~~だけで、少数点切り捨て処理ができるという演算子だったようです。
通常であれば、
Math.floor(10.001)
> 10
このように記述すると思いますが、
~~10.001
> 10
これだけで、整数値化できてしまいます。
これを、知らないプログラマーが見たら、読めないコードなのですが、知っている人だけが効率化できるプログラミングです。
さあ、教科書よりワンランク上のプログラミングを目指してみたくなりませんか?
0 件のコメント:
コメントを投稿