@@ -350,8 +350,8 @@ the `stdin` function from the `io` module, which will allow us to handle user
350
350
input:
351
351
-->
352
352
353
- プログラムの1行目で、 ` use std::io ` として、標準ライブラリから入/出力機能を取り込んだことを思い出してください 。
354
- 今度は、 ` io ` モジュールの` stdin ` 関数を呼び出しましょう:
353
+ プログラムの最初の行に ` use std::io ` と書いて、標準ライブラリの入出力機能を取り込んだことを思い出してください 。
354
+ ここで ` io ` モジュールの` stdin ` 関数を呼び出して、ユーザ入力を処理できるようにしましょう。
355
355
356
356
``` rust,ignore
357
357
{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:read}}
@@ -365,9 +365,8 @@ the program, we could still use the function by writing this function call as
365
365
handle to the standard input for your terminal.
366
366
-->
367
367
368
- 仮に、プログラムの冒頭で` use std::io ` としていなければ、この関数呼び出しは、` std::io::stdin ` と記述していたでしょう。
369
- この` stdin ` 関数は、 [ ` std::io::Stdin ` ] [ iostdin ] <!-- ignore --> オブジェクトを返し、この型は、
370
- ターミナルの標準入力へのハンドルを表す型になります。
368
+ もし、プログラムの最初に` use std::io ` と書いて` io ` ライブラリをインポートしていなかったとしても、` std::io::stdin ` のように呼び出せば、この関数を利用できます。
369
+ ` stdin ` 関数は、ターミナルの標準入力へのハンドルを表す型である[ ` std::io::Stdin ` ] [ iostdin ] のインスタンスを返します。
371
370
372
371
[ iostdin ] : https://doc.rust-lang.org/std/io/struct.Stdin.html
373
372
@@ -381,11 +380,10 @@ argument. The string argument needs to be mutable so the method can change the
381
380
string’s content.
382
381
-->
383
382
384
- その次のコード片、` .read_line(&mut guess) ` は、標準入力ハンドルの[ ` read_line ` ] [ read_line ] <!-- ignore -->
385
- メソッドを呼び出して、ユーザから入力を受け付けます。また、` read_line ` メソッドに対して、` &mut guess ` という引数を一つ渡していますね。
386
- ` read_line ` メソッドの仕事は、ユーザが標準入力したものすべてを取り出し、文字列に格納することなので、
387
- 格納する文字列を引数として取ります。この文字列引数は、可変である必要があります。
388
- メソッドがユーザ入力を追記して、文字列の中身を変えられるようにということですね。
383
+ 次の` .read_line(&mut guess) ` 行は、標準入力ハンドルの[ ` read_line ` ] [ read_line ] メソッドを呼び出し、ユーザからの入力を得ています。
384
+ また、` read_line ` の引数として` &mut guess ` を渡し、ユーザ入力をどの文字列に格納するかを指示しています。
385
+ ` read_line ` メソッドの仕事は、ユーザが標準入力に入力したものを文字列に(その内容を上書きすることなく)追加することですので、文字列を引数として渡しているわけです。
386
+ 引数の文字列は、その内容をメソッドが変更できるように、可変である必要があります。
389
387
390
388
[ read_line ] : https://doc.rust-lang.org/std/io/struct.Stdin.html#method.read_line
391
389
@@ -401,28 +399,28 @@ immutable by default. Hence, you need to write `&mut guess` rather than
401
399
thoroughly.)
402
400
-->
403
401
404
- ` & ` という記号は、この引数が* 参照* であることを表し、これのおかげで、データを複数回メモリにコピーせずとも、
405
- コードの複数箇所で同じデータにアクセスできるようになるわけです。参照は複雑な機能であり、
406
- とても安全かつ簡単に参照を使うことができることは、Rustの主要な利点の一つでもあります。
407
- そのような詳細を知らなくても、このプログラムを完成させることはできます。
408
- 現時点では、変数のように、参照も標準で不変であることを知っておけばいいでしょう。
409
- 故に、` &guess ` と書くのではなく、` &mut guess ` と書いて、可変にする必要があるのです。
410
- (第4章で参照についてより詳細に説明します)
402
+ この` & ` は、この引数が* 参照* であることを示し、これにより、コードの複数の部分が同じデータにアクセスする際に、そのデータを何度もメモリにコピーせずに済みます。
403
+ 参照は複雑な機能ですが、Rustの大きな利点の一つは参照を安全かつ簡単に使用できることです。
404
+ このプログラムを完成させるのに、そのような詳細を知る必要はないしょう。
405
+ とりあえず知っておいてほしいのは、変数のように、参照もデフォルトで不変であることです。
406
+ したがって、` &guess ` ではなく` &mut guess ` と書いて、可変にする必要があります。
407
+ (第4章では参照についてより詳しく説明します)
411
408
412
409
<!--
413
410
### Handling Potential Failure with the `Result` Type
414
411
-->
415
412
416
- ### ` Result ` 型で失敗の可能性を扱う
413
+ ### ` Result ` 型で失敗の可能性をあつかう
417
414
418
415
<!--
419
416
We’re still working on this line of code. Although we’re now discussing a third
420
417
line of text, it’s still part of a single logical line of code. The next part
421
418
is this method:
422
419
-->
423
420
424
- まだ、この行は終わりではありませんよ。ここまでに議論したのはテキストでは1行ですが、コードとしての論理行としては、
425
- まだ所詮最初の部分でしかないのです。2番目の部分はこのメソッドです:
421
+ まだ、このコードの行は終わりではありませんよ。
422
+ これから説明するのはテキスト上は3行目になりますが、まだ1つの論理的な行の一部です。
423
+ 次のパートはこのメソッドです。
426
424
427
425
``` rust,ignore
428
426
{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:expect}}
@@ -432,8 +430,7 @@ is this method:
432
430
We could have written this code as:
433
431
-->
434
432
435
- ` .foo() ` という記法で、メソッドを呼び出す時、改行と空白で長い行を分割するのがしばしば賢明です。
436
- 今回の場合、こう書くこともできますよね:
433
+ このコードは、こう書くこともできました。
437
434
438
435
``` rust,ignore
439
436
io::stdin().read_line(&mut guess).expect("Failed to read line");
@@ -446,8 +443,9 @@ lines when you call a method with the `.method_name()` syntax. Now let’s
446
443
discuss what this line does.
447
444
-->
448
445
449
- しかし、長い行は読みづらいものです。なので、分割しましょう: 2回のメソッド呼び出しに、2行です。
450
- さて、この行が何をしているのかについて議論しましょうか。
446
+ しかし、長い行は読みづらいので、分割したほうがよいでしょう。
447
+ ` .method_name() ` 構文でメソッドを呼び出すとき、改行と空白で長い行を分割するのが賢明なことがよくあります。
448
+ それでは、この行が何をするのか説明します。
451
449
452
450
<!--
453
451
As mentioned earlier, `read_line` puts whatever the user enters into the string
@@ -462,12 +460,13 @@ different code based on which variant an enum value is when the conditional is
462
460
evaluated.
463
461
-->
464
462
465
- 以前にも述べたように、` read_line ` メソッドは、渡された文字列にユーザが入力したものを入れ込むだけでなく、
466
- 値も返します(今回は[ ` io::Result ` ] [ ioresult ] <!-- ignore --> です)。 Rustには` Result ` と名のついた型が、
467
- 標準ライブラリにたくさんあります: 汎用の[ ` Result ` ] [ result ] <!-- ignore --> の他、
468
- ` io::Result ` などのサブモジュール用に特化したものまで。
469
- この` Result ` 型は、[ * 列挙型* ] [ enums ] <!-- ignore --> であり、普通、* enum* (イーナム)と呼ばれます。
470
- 列挙型とは、固定された種類の値を持つ型のことであり、それらの値は、enumの* 列挙子* (variant)と呼ばれます。
463
+ 前述したように、` read_line ` メソッドは、渡された文字列にユーザが入力したものを入れます。
464
+ しかし、同時に値(この場合は[ ` io::Result ` ] [ ioresult ] )も返します。
465
+ Rustの標準ライブラリには` Result ` という名前の型がいくつかあります。
466
+ 汎用の[ ` Result ` ] [ result ] と、` io::Result ` といったサブモジュール用の特殊な型などがあります。
467
+ ` Result ` 型は[ * 列挙型* ] [ enums ] で、よく* enum* と呼ばれ、取りうる値として決まった数の* 列挙子* (variant)を持ちます。
468
+ 列挙型はよく` match ` と一緒に使われます。
469
+ これは条件式の一種で、評価時に、列挙型の値がどの列挙子であるかに基づいて異なるコードを実行できるという便利なものです。
471
470
472
471
[ ioresult ] : https://doc.rust-lang.org/std/io/type.Result.html
473
472
[ result ] : https://doc.rust-lang.org/std/result/enum.Result.html
@@ -477,7 +476,8 @@ Chapter 6 will cover enums in more detail. The purpose of these `Result` types
477
476
is to encode error-handling information.
478
477
-->
479
478
480
- enumについては、第6章で詳しく解説します。
479
+ enumについては第6章で詳しく説明します。
480
+ これらの` Result ` 型の目的は、エラー処理に関わる情報を符号化(エンコード)することです。
481
481
482
482
[ enums ] : ch06-00-enums.html
483
483
@@ -488,9 +488,9 @@ variant means the operation failed, and `Err` contains information about how or
488
488
why the operation failed.
489
489
-->
490
490
491
- ` Result ` 型に関しては、列挙子は ` Ok ` か` Err ` です。` Ok ` 列挙子は、処理が成功したことを表し、
492
- 中に生成された値を保持します。 ` Err ` 列挙子は、処理が失敗したことを意味し、 ` Err ` は、処理が失敗した過程や、
493
- 理由などの情報を保有します 。
491
+ ` Result ` の列挙子は ` Ok ` か` Err ` です。
492
+ ` Ok ` 列挙子は処理が成功したことを示し、 ` Ok ` の中には正常に生成された値が入っています。
493
+ ` Err ` 列挙子は処理が失敗したことを意味し、 ` Err ` には処理が失敗した過程や理由についての情報が含まれています 。
494
494
495
495
<!--
496
496
Values of the `Result` type, like values of any type, have methods defined on
@@ -503,22 +503,20 @@ the return value that `Ok` is holding and return just that value to you so you
503
503
can use it. In this case, that value is the number of bytes in the user’s input.
504
504
-->
505
505
506
- これら` Result ` 型の目的は、エラー処理の情報をコード化することです。` Result ` 型の値も、他の型同様、
507
- メソッドが定義されています。` io::Result ` オブジェクトには、呼び出し可能な[ ` expect ` メソッド] [ expect ] <!-- ignore --> があります。
508
- この` io::Result ` オブジェクトが` Err ` 値の場合、` expect ` メソッドはプログラムをクラッシュさせ、
509
- 引数として渡されたメッセージを表示します。` read_line ` メソッドが` Err ` を返したら、
510
- 恐らく根底にあるOSによるエラーに起因するのでしょう。
511
- この` io::Result ` オブジェクトが` Ok ` 値の場合、` expect ` メソッドは、` Ok ` 列挙子が保持する
512
- 返り値を取り出して、ただその値を返すので、これを使用することができるでしょう。
513
- 今回の場合、その返り値とは、ユーザが標準入力に入力したデータのバイト数になります。
506
+ ` Result ` 型の値にも、他の型と同様にメソッドが定義されています。
507
+ ` io::Result ` のインスタンスには[ ` expect ` メソッド] [ expect ] がありますので、これを呼び出せます。
508
+ この` io::Result ` インスタンスが` Err ` の値の場合、` expect ` メソッドはプログラムをクラッシュさせ、引数として渡されたメッセージを表示します。
509
+ ` read_line ` メソッドが` Err ` を返したら、それはおそらく基礎となるオペレーティング・システムに起因するものでしょう。
510
+ もしこの` io::Result ` オブジェクトが` Ok ` 値の場合、` expect ` メソッドは` Ok ` 列挙子が保持する戻り値を取り出して、その値だけを返してくれますので、(呼び出し元では)その値を使うことができます。
511
+ 今回の場合、その値はユーザ入力のバイト数になります。
514
512
515
513
[ expect ] : https://doc.rust-lang.org/std/result/enum.Result.html#method.expect
516
514
517
515
<!--
518
516
If you don’t call `expect`, the program will compile, but you’ll get a warning:
519
517
-->
520
518
521
- もし、` expect ` メソッドを呼び出さなかったら、コンパイルは通るものの 、警告が出るでしょう:
519
+ もし、` expect ` メソッドを呼び出さなかったら、コンパイルできるものの 、警告が出るでしょう。
522
520
523
521
``` console
524
522
{{#include ../listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt}}
@@ -529,8 +527,7 @@ Rust warns that you haven’t used the `Result` value returned from `read_line`,
529
527
indicating that the program hasn’t handled a possible error.
530
528
-->
531
529
532
- コンパイラは、私たちが` read_line ` メソッドから返ってきた` Result ` 値を使用していないと警告してきており、
533
- これは、プログラムがエラーの可能性に対処していないことを示します。
530
+ Rustは、私たちが` read_line ` から返された` Result ` 値を使用していないことを警告し、これは、プログラムがエラーの可能性に対処していないことを示します。
534
531
535
532
<!--
536
533
The right way to suppress the warning is to actually write error handling, but
@@ -539,9 +536,8 @@ use `expect`. You’ll learn about recovering from errors in [Chapter
539
536
9][recover].
540
537
-->
541
538
542
- 警告を抑制する正しい手段は、実際にエラー対処コードを書くことですが、今は、
543
- 問題が起きた時にプログラムをクラッシュさせたいので、` expect ` を使用できるわけです。
544
- エラーから復旧する方法については、第9章で学ぶでしょう。
539
+ 警告を抑制する正しい方法は実際にエラー処理を書くことですが、今回の場合は問題が起きたときにこのプログラムをクラッシュさせたいだけなので、` expect ` が使えるわけです。
540
+ エラーからの回復については第9章で学びます。
545
541
546
542
<!--
547
543
### Printing Values with `println!` Placeholders
0 commit comments