Node.jsのコアモジュールの1つであるnetに、Socketクラスが用意されている。
JSではソケットから能動的にreadやrecvするのではなく、イベント(以下の例では ‘data’ イベント)に対応したコールバックを与えておいて(onメソッド)から、接続を確立(connect)し、要求を送信(write)する。
const net = require('net'), client = new net.Socket()
client.setEncoding('utf8')
const host='www2.nagano.ac.jp', port=80
const resource='/hiraoka/NP/'
client.on('data', data=>console.log(data))
client.connect(port,host,()=>{
client.write(`GET ${resource} HTTP/1.0\r\n\r\n`)
})
以下のプログラム(ソースはここ)を実行してみると使い方がわかるだろう。
console.log(process.argv)
node argv.js a b c dd ee ff
この結果からもわかるように、配列の 0,1番にはプログラム本体側の情報が入っている。そのためコマンドラインパラメータを扱うために若干の配列操作が必要となる。
for(let s of process.argv.slice(1))
console.log(s.repeat(3)+s.split('').reverse().join('').repeat(3))
Arrayの先頭要素を取り出す方法はRubyと同様に2つある。
process.argv.shift() // 破壊的方法
process.argv[0] // 非破壊的
繰り返し: (2つの書き方)
// 配列 a に対して
for(let e of a) console.log(e)
// ↑と↓はプログラムとして同等
a.forEach((e)=>console.log(e))
各要素に同じ操作:
a.map((e)=>e**2)
連結: joinメソッドが使える(既出)。
Rubyの場合とほぼ同じ書き方が使われる。
const filename=process.argv[2]||'xxx.txt'
&&
、||
が使われる。
=
よりも高い(ドキュメント参照)。