[TIL]9月17日
今日習った内容
BackjunからJavaScript入力を受信
Node.js「readline」モジュール
チームは毎晩5時30分から行われるアルゴリズム学習で、白駿2667号:単番解答を行った.
solution関数内で論理を記述するプログラマーとは異なり,Baek Junは入力値の処理を単独で行う必要がある.プログラマーやバーコードのようにskeletonのプラットフォームを簡単に提供することに慣れている私にとって、入力処理を単独で行う必要があるのは最も不便で、最も見慣れない場所です.しかし、白俊は本当に膨大なアルゴリズムの問題を持っていますか?それらの質問に答えたいです.
そこで今日はjavascriptを使って入力を受信する方法を整理し、バックグラウンドプラットフォームをより熟知しています.
検索してみると、JavaScriptを使って入力を受信する方法は大きく2つあります.
今日はreadlineモジュール入力の使い方について説明します.
Node.js公式ドキュメントでreadlineモードについて以下に説明する.
The readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time.
モジュールの読み込み
const readline = require('readline');
インタフェースインスタンスの作成
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
The readline.createInterface()メソッドはnew readlineです.インタフェースインスタンスを作成する方法.このインスタンスは、単一の入力可読ストリームと単一の出力書き込み可能ストリームに関連付ける必要があるため、インスタンスの作成時に現在実行中のノードです.jsプロセスのstdinとstdoutを接続します.ラインイベントリスナーの追加
入力ストリームが終了行の入力(n、r、またはrn)を受信すると、「line」イベントが発生します.このイベントは、通常、ユーザーがEnterキーを押したり、車に戻ったりするときに発生します.
入力された各行は入力値としてリスナー関数に渡され、リスナー関数操作によって入力された入力値を処理できます.
この場合、通常は配列に追加され、次のように記述できます.
const arr = []
rl.on('line', (input) => {
arr.push(input)
console.log(arr)
});
コードを作成した後、vsCodeを開き、端末からファイルがあるディレクトリに移動します.その後、端末に
node 파일이름.js
を打つと、次の入力ボックスが表示されます.値を入力します
行を入力してEnterキーを押すたびに「line」イベントが発生し、リスナー関数の動作が表示されます.また、入力した値は
string
時間でなければならないことがわかります!実際の符号化テストでは、数値入力値が与えられた場合、入力を受け入れ、map関数でデータ型を変更する必要があります.「close」イベントリスナーの追加
でもこのように楽しく入力すると気になるところがあります「いつまで入力しますか...?」
入力した値で問題を解きたいのですが、どんどん入力を受けます.
入力を終了するイベントは「close」イベントです.このアクティビティは、次の場合に開始されます.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const arr = [];
rl.on("line", (line) => {
arr.push(line);
console.log(arr);
if (arr.length === 5) {
rl.close();
}
});
rl.on("close", function () {
console.log(arr.length);
console.log("입력 끝난다?");
});
上のコードでは、5回の入力を受け取ってrlを使用します.close()を起動します.そして、リスナーによって起動した「close」イベントが検出され、closeイベントリスナー関数が実行される様子が表示されます.
したがって,アルゴリズム問題を解く場合は,「line」イベント関数部分に入力関連論理を記述し,「close」イベントリスナー関数内部に問題解決論理を記述すればよい.
しかし白駿では、
rl.close()
を別途呼ぶ必要がなくても動作可能である.process.exit() ?
また,closeイベント終了時には命令フロー終了の
process.exit();
が書かれているが,いずれにしてもclose
イベント関数が呼び出されて実行されると,より多くの入力がないため,プログラムを終了するという意味であるはずである.でもNodejsドキュメントでは、
The readline.Interface instance is finished once the 'close' event is emitted.
書いてある...ではcloseイベントは番組ごとに1回という意味でしょうか?process.exit()を使う理由が気になります.
おもしろいのはNodejs file Sysemモジュールを使用する方法はprocessです.つまり、exit()は書かない.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const arr = [];
rl.on("line", (line) => {
arr.push(line);
console.log(arr);
});
rl.on("close", function () {
console.log(arr.length);
console.log("프로세스 끝난다?");
//process.exit();
});
に感銘を与える
JavascriptでBaek Junを解くのはちょっと不便だけどこんなNodeこれはjs入出力を理解する機会であり,有益である.
無駄な知識はない.
原理が分かれば、暗記も楽になります!
リファレンス
Reference
この問題について([TIL]9月17日), 我々は、より多くの情報をここで見つけました https://velog.io/@seungrok-yoon/TIL-20210917テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol