forked from workshopper/learnyounode
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
214 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,44 @@ | ||
ひとつ、あるいは複数の数を引数として受け取り、それらを足し合わせた値をコンソール(stdout)に出力するコマンドラインアプリを書いてください。 | ||
1つ以上の整数をコマンドライン引数として受け取り、それらを足し合わせた値をコンソール(stdout)に出力するコマンドラインアプリを書いてください。 | ||
|
||
---------------------------------------------------------------------- | ||
## ヒント | ||
|
||
コマンドライン引数を読むためにはグローバル変数の `process` というオブジェクトが使えます。`process` は `argv` という `Array` を持っています。その `Array` のなかには全てのコマンドラインが入っています。例: `process.argv` | ||
コマンドライン引数を読むためにはグローバル変数の `process` というオブジェクトが使えます。 | ||
`process` には `argv` という `配列` のプロパティがあります。その `配列` の中には全てのコマンドライン引数が入っています。 | ||
|
||
例: `process.argv` | ||
|
||
新しいアプリ `(program.js)` にこれを書いてスタートしてください: | ||
|
||
```js | ||
console.log(process.argv) | ||
``` | ||
|
||
コマンドラインに `node program.js` を入力してアプリを実行します。引数も使えます! 例: | ||
コマンドラインに `node program.js` を入力してアプリを実行します。コマンドライン引数も使えます! | ||
例: | ||
|
||
```sh | ||
$ node program.js 1 2 3 | ||
``` | ||
|
||
実行するとこのように出力されるはずです: | ||
実行すると以下のように出力されるはずです: | ||
|
||
```js | ||
[ 'node', '/あなた/の/アプリ/フォルダ/program.js', '1', '2', '3' ] | ||
``` | ||
|
||
次のステップでは数値だけを合計して表示する方法を考えます。`argv` の一つ目の引数はいつでも `node` です。二つ目の引数はいつもあなたのアプリファイルのパスです。なので三つ目の引数からスタートしないといけません。それぞれの要素を最後の要素まで合計してください。 | ||
次のステップでは数値だけを合計して表示する方法を考えます。 | ||
|
||
`argv` の1つ目の引数はいつでも `node` です。2つ目の引数はあなたのアプリファイルのパスです。 | ||
そのためコマンドライン引数は3つ目の引数からスタートします。それぞれの要素を最後の要素まで合計してください。 | ||
|
||
`process.argv` の要素は全て string ですので注意してください。 | ||
もしかしたら数字への変換が必要になるかもしれません。変換するには、数字の前に `+` を書きます。`Number()`を使う方法もあります。 | ||
|
||
例: `+process.argv[2]` または `Number(process.argv[2])` 。 | ||
|
||
`process.argv` の要素は全て string ですので注意してください。もしかしたら数字への変換が必要になるかもしれません。変換するには、数字の前に `+` を書きます。`Number()`を使う方法もあります。例: `+process.argv[2]` または `Number(process.argv[2])` 。 | ||
`{appname} verify program.js` で、アプリが正しく動くかどうか確かめられます。{appname} はあなたのアプリの実行時に引数を渡します。 | ||
|
||
`{appname} verify program.js` で、アプリが正しく動くかどうか確かめられます。{appname} はあなたのアプリの実行時に引数を渡します。単純にアプリを実行する方法もあります: `{appname} run program.js`。 `run` を使うと各ステップのためのテスト設定を呼び出して実行することが出来ます。 | ||
単純にアプリを実行する方法もあります: `{appname} run program.js`。 `run` を使うと各ステップのためのテスト設定を呼び出して実行することが出来ます。 | ||
|
||
---------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,31 @@ | ||
拡張子のフィルタを使ってファイルリストをコンソールに出すアプリを書いてください。アプリの一つ目の引数はフォルダーのパスです(例えば `/あなた/の/フォルダー/`)。 二つ目の引数でフィルタしたい拡張子を指定します。 | ||
拡張子によってフィルタしたファイルリストをコンソールに出力するアプリを書いてください。 | ||
|
||
例えば: `"txt"` が二つ目の引数だったら*後ろに `.txt` *がついてあるだけファイルのリストを表示しないといけません。メモ:二つ目の引数は `"."` プレフィックスがありません。 | ||
1つ目の引数はフォルダのパスです(例えば `/あなた/の/フォルダー/`)。 2つ目の引数でフィルタする拡張子を指定します。 | ||
|
||
コンソールにそのリストを出してください。一つのファイル名は一行。 **非同期**I/O を使ってください。 | ||
例えば: 2つ目の引数が `"txt"` のときは*後ろに `.txt` *がついているファイルだけを表示しなければいけません。 | ||
メモ:2つ目の引数は `"."` プレフィックスがありません。 | ||
|
||
コンソールにフィルタリングしたファイルのリストを出力してください。 | ||
1行につき1つのファイル名を出力します。 また、**非同期**I/O を使ってください。 | ||
|
||
---------------------------------------------------------------------- | ||
## HINTS | ||
## ヒント | ||
|
||
`fs.readdir()` という関数の一つ目の引数はパスです。コールバックは二つ目です。コールバックはこのようになります: | ||
`fs.readdir()` 関数の1つ目の引数はディレクトリへのパスです。2つ目の引数はコールバック関数です。 | ||
コールバック関数は以下のようになります: | ||
|
||
```js | ||
function callback (err, list) { /* ... */ } | ||
``` | ||
|
||
`list` はファイル名の `String` の `Array` です。 | ||
`list` はファイル名の `String` が格納された `Array` です。 | ||
|
||
`fs` モジュールのドキュメントはブラウザーでこのリンクを見てください: | ||
`fs` モジュールのドキュメントはこのリンクをブラウザで見てください: | ||
{rootdir:/node_apidoc/fs.html} | ||
|
||
Node の `path` も役に立つかもしれません。とくに `extname` の関数。 | ||
Node の `path` も役に立つかもしれません。特に `extname` の関数が使えます。 | ||
|
||
`path` モジュールのドキュメントはブラウザーでこのリンクを見てください: | ||
`path` モジュールのドキュメントはこのリンクをブラウザで見てください: | ||
{rootdir:/node_apidoc/path.html} | ||
|
||
---------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,42 @@ | ||
一つ目の引数として指定された URL に、 HTTP で GET を送る (※)アプリを書いてください。 | ||
そのリクエストに対するレスポンスを含む全ての`"data"`イベントの文字列を、**一つずつ**改行で区切って、コンソールに書き出してください。 | ||
1つ目の引数として指定された URL に、 HTTP で GET を送信する (※)アプリを書いてください。 | ||
|
||
※これからは「GET リクエスト」と記述します。 | ||
そのリクエストに対するレスポンスを含む全ての`"data"`イベントで受け取った文字列を、**1つずつ**改行で区切って、コンソールに書き出してください。 | ||
|
||
※ これからは「GET リクエスト」と記述します。 | ||
|
||
---------------------------------------------------------------------- | ||
## ヒント | ||
|
||
この例題のために `http` の Node.js モジュールが必要になります。 | ||
|
||
`http` モジュールのドキュメントはブラウザーでこのリンクを見てください: | ||
`http` モジュールのドキュメントはこのリンクをブラウザで見てください: | ||
{rootdir:/node_apidoc/http.html} | ||
|
||
`http.get()` という関数は簡単な GET リクエストのショートカットです。解決方法をシンプルするのに役に立つと思います。 `http.get()` の一つ目の引数は GET リクエストの URL です。二つ目はコールバック関数です。 | ||
`http.get()` という関数は簡単な GET リクエストのショートカットです。解決方法をシンプルするのに役に立つと思います。 | ||
`http.get()` の1つ目の引数は GET リクエストの URL です。2つ目はコールバック関数です。 | ||
|
||
```js | ||
http.get(url, callback) | ||
``` | ||
|
||
`http` はよくあるイディオム `(error, result)` と違って以下のようなコールバックになります: | ||
`http` はよくあるイディオム `(error, result)` と違って以下のようなコールバック関数となっています: | ||
|
||
```js | ||
function callback (response) { /* ... */ } | ||
``` | ||
|
||
`response` のオブジェクトは Node.js の **Stream** です。Stream はイベントを発行するオブジェクトと考えてよいです。 Stream における大切な三つのイベントは: `data` 、 `error` と `end` です。各イベント時にデータを受け取る為には、以下のようにリスナーを設定します。 | ||
`response` のオブジェクトは Node.js の **Stream** です。Stream はイベントを発行するオブジェクトと考えてよいです。 | ||
Stream における大切な3つのイベントは: `data` 、 `error` と `end` です。 | ||
各イベント時にデータを受け取る為には、以下のようにリスナを設定します。 | ||
|
||
```js | ||
response.on("data", function (data) { /* ... */ }) | ||
``` | ||
|
||
`data` イベントは処理できるデータチャンク(※)が現れた時に発行されます。チャンクのサイズはデータの出元によって変わります。 | ||
`data` イベントは処理できるデータチャンク(※)が現れた時に発行されます。チャンクのサイズはデータによって変わります。 | ||
※ データの一部分。Stream ではこれが断続的に提供されます。 | ||
|
||
`http.get()` の `response` の Stream オブジェクトには `setEncoding()` という関数があります。それを `utf8` という値を使って呼ぶとデータイベントの `Buffer` の代わりに文字列が渡ってきます。 | ||
`http.get()` の `response` の Stream オブジェクトには `setEncoding()` という関数があります。 | ||
それを `utf8` という値を使って呼ぶとデータイベントの `Buffer` の代わりに文字列が渡ってきます。 | ||
|
||
---------------------------------------------------------------------- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.