実は最近調子が悪く、療養中の身で最近記事をかけていません。(ESP8266関係も追っかけられていません)
ただ、Webを彷徨っていたらこんな記事を見かけたので考えてみました。
i%n==0?1:0
ってどんな意味?
との質問。演算子の優先順位から言って、((i%n)==0)?1:0 と等価で、iがnの倍数の時に1になる動きをするのでしょう。
実際にいくつかの言語で試してみました。
1.C言語
#include <stdio.h> int main(int argc,char *argv[]) { int n=5; for(int i=0;i<20;i++) printf("%d %d\n",i,i%n==0?1:0); }
となります。コンパイルと実行結果は、
$ gcc foobar.c -o foobar -std=c99 $ ./foobar 0 1 1 0 2 0 3 0 4 0 5 1 6 0 7 0 8 0 9 0 10 1 11 0 12 0 13 0 14 0 15 1 16 0 17 0 18 0 19 0
2.Java言語
public class foobar { public static void main(String[] args) { int n=5; for(int i=0;i<20;i++){ System.out.println(i+" "+(i%n==0?1:0) ); } } }
コンパイルと実行は、
$ sudo apt-get install default-jdk $ javac foobar.java $ java foobar 0 1 1 0 2 0 3 0 4 0 5 1 6 0 7 0 8 0 9 0 10 1 11 0 12 0 13 0 14 0 15 1 16 0 17 0 18 0 19 0
となります。
3.JavaScript言語(Node.js 環境)
n=5; for(i=0;i<20;i++){ console.log(i+" "+(i%n==0?1:0)) }
実行は、
$ nodejs foobar-node.js 0 1 1 0 2 0 3 0 4 0 5 1 6 0 7 0 8 0 9 0 10 1 11 0 12 0 13 0 14 0 15 1 16 0 17 0 18 0 19 0
4.JavaScript(ブラウザ環境)
n=5; for(i=0;i<20;i++){ document.writeln(i+" "+(i%n==0?1:0)+"<BR>") }
ブラウザでからのページを開いて、右クリックでJavaScriptコンソールを開いて、上記のプログラムをコピペしてリターンキーを押すと、結果がブラウザ側に表示されます。
5.JavaScript(おまけ)
サーバサイドで実行して、ブラウザで結果を見る場合です。
var http = require('http'); var n=0; var server = http.createServer(); server.on('request', doRequest); server.listen(8000); console.log('Server running at http://127.0.0.1:8000/'); function doRequest(req,res){ res.writeHead(200, {'Content-Type': 'text/plain'}); n=n+1 res.write("Try #"+n+"\n"); for(i=0;i<45;i++){ res.write(i+" "+(i%n==0?1:0)+"\n"); } res.end('Completed\n'); }
これを foobar-server.js で保存して
$ nodejs foobar-server.js
で実行し、ブラウザで http://localhost:8000/ を表示すると結果が見れます。
firefoxではリロード毎にちゃんとnが1ずつ増えていくのですが、Chromeだと1から始まって2ずつ増えていきます。理由はわかりませんが、リロードの前に無駄な読み込みでもしているんでしょうか。それとも?