大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

改行の有無だけの話なのか?

著者:高木信尚
公開日:2018/05/31
最終更新日:2018/05/30
カテゴリー:技術情報
タグ:

高木です。おはようございます。

JavaScript初心者の私が、勉強用に使っている動作環境は主にNode.jsです。
いろいろ実験するために、都度コードを書きながら結果をコマンドラインに表示させています。
いわゆるprintfデバッグというやつですね。

そこで気になることがあります。
console.logとprocess.stdout.writeの違いについてです。
ネットで調べると大体は、前者は改行あり、後者は改行無しの違いだと説明しています。
本当にそうなのでしょうか?

console.logからprocess.stdout.writeを呼び出しているとか、そういう実装都合の話はあることでしょう。
しかし、この両者はもともとの目的がまったく違うと思うのです。

consoleオブジェクトは本来デバッグ・コンソールを制御するためのものです。
対して、process.stdouotオブジェクトは標準出力を制御するためのものです。
ちなみに、process.stdinやprocess.stderrもちゃんとあるようです。

デバッグ・コンソールへの出力と標準出力への出力を混同するのは、画面への出力と標準出力への出力を混同するぐらい痛いことだと思います。
私はJavaScript初心者ですが、プログラミング初心者ではありません。
さすがにそれぐらいのことはわかるつもりです。

私が欲しいのは(printfデバッグのためではあっても)デバッグ・コンソールへの出力ではなく標準出力への出力です。
また、標準エラーへの出力も使い分けたいところです。
当然、標準入力も使いたいと思います。

それであれば、本来使うべきなのはconsole.logではなくprocess.stdout.writeだということがわかります。
同様に、console.errorではなくprocess.stderr.writeを使うべきです。
改行したければ、自分で明示的に改行文字を出力すればいいだけで、改行の有無で関数を使い分けるのはナンセンスです。

最初のころは右も左もわからず、適当に見つけたサンプルを参考にconsole.logを使っていましたが、これからは違います。
ちゃんと真面目に勉強すれば、この辺のことが正しく理解できるのがいいですね。
「動けばOK!」で場当たり的なことをやっていると、どんどんおかしな癖がついてしまいます。

これからも、表面的なことだけではなく本質を理解するための勉強をしていきたいと思います。

    上に戻る