質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

11981閲覧

Node.jsでの入出力のやり方

Alt_

総合スコア26

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2017/10/11 06:03

paizaというプログラミングで問題を解くサイトがあるのですが、そこでjavascriptを今勉強しているためjsで問題を解こうとしたところ、入出力がnode.jsを用いた文でした。

node.jsは触ったことがないため、その入出力構文をまず理解しようと調べたところ、詳しく書いてあるサイトが見つからず困っています。

paizaで使われているコードはこれになります。
どこの構文が何をしてどこで値を受け取っているのか全くわからず、、、
このコードの簡単な解説などしていただけると助かります。
解説が載っているサイトなどだけでも教えていただけると助かります。

process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data', function (chunk) { var line = chunk.toString(); console.log("XXXXXX"); });
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

lang

1process.stdin.on('data', function (chunk) { 2 var line = chunk.toString(); 3 console.log("XXXXXX"); 4});

process.stdin.on("data", fun)は、標準入力にデータが来たときに呼び出される関数(イベントハンドラー)を登録します。ざっくりいうと、「標準入力にデータがきたらこうしてね」を設定します。

第2引数にfunction expression(anonymous function/無名関数)を渡していますが、dataイベントが発生したとき、この無名関数の引数にデータが渡され実行されます。

例えばユーザーが"abc"と入力してEnterを押すと、パラメーターchunk"abc\n"が渡されます。

以下は細かい話です。

process.stdinstream.Readableクラスです。

公式のReadableのdocsでresumestream three statesを読めば分かりますが、デフォルトではstdinは入ってきたデータをそのまま捨てます。

.resume()するかdataイベントのハンドラーを設定すると、"flowing"モードに切り替わり、dataイベントのハンドラーにせっせとデータを送るようになります。またこれにより、プログラムの最後の行まで実行されたあと勝手にプロセスが終了しなくなります。

Readabledataイベントで渡すデータはデフォルトではBufferオブジェクトですが、.setEncoding()によりstringとして渡すようになります。つまり今のコードでは引数chunkが文字列となります。(なので.toString()は必要ないと思います)

dataイベントのハンドラーを設定すればstdinは"flowing"モードになるので、なぜprocess.stdin.resume()が必要かはよくわからないです。試しにそれなしで実行してみましたがうまくいきます。分かる方がいたらご指摘ください。

投稿2017/10/11 08:07

karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どこで値を受け取っているのか

質問文のコードを
「実行したら入力を待って、入力があったらそれを返す」ものと考えている、
例えば

python

1s = raw_input()

とか

C#

1var s = Console.ReadLine();

のように。

だとすればまずそれが違います。

質問文のコードは
「標準入力から値が来たらどうするか」を記述する、つまりイベントドリブンです。

この部分で標準入力から値が来たら第二引数の関数を実行するように登録してます:

js

1process.stdin.on('data', function (chunk) { 2 var line = chunk.toString(); 3 console.log("XXXXXX"); 4});

投稿2017/10/11 07:59

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

paizaラーニング
https://paiza.jp/works
のJavaScript入門編のレッスンから受けてみてはどうでしょうか。

投稿2017/10/11 07:43

shimitei

総合スコア799

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問