Skip to content

Commit 29039f1

Browse files
committed
ch08-01:後半の訳を改善
1 parent 6f9f499 commit 29039f1

File tree

1 file changed

+51
-52
lines changed

1 file changed

+51
-52
lines changed

src/ch08-01-vectors.md

Lines changed: 51 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ Listing 8-5 shows both methods of accessing a value in a vector, either with
191191
indexing syntax or the `get` method.
192192
-->
193193

194-
リスト8-5はベクタの値にアクセスする両方の方法として、添字記法と`get`メソッドが示されています。
194+
リスト8-5はベクタの値にアクセスする両方の方法として、添え字記法と`get`メソッドが示されています。
195195

196196
```rust
197197
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-05/src/main.rs:here}}
@@ -202,7 +202,7 @@ indexing syntax or the `get` method.
202202
access an item in a vector</span>
203203
-->
204204

205-
<span class="caption">リスト8-5:添字記法か`get`メソッドを使用してベクタの要素にアクセスする</span>
205+
<span class="caption">リスト8-5:添え字記法か`get`メソッドを使用してベクタの要素にアクセスする</span>
206206

207207
<!--
208208
Note two details here. First, we use the index value of `2` to get the third
@@ -212,10 +212,10 @@ or by using the `get` method with the index passed as an argument, which gives
212212
us an `Option<&T>`.
213213
-->
214214

215-
ここでは2つことに注目してください
215+
ここでは2つのことに注目してください
216216
1つ目は、3番目の要素を得るのに`2`という添え字の値を使用していることです。
217217
ベクタは番号で索引化されますが、その番号は0から始まります。
218-
2つ目は、3番目の要素を得る2つの方法とは、`&``[]`を使用して参照を得るものと、`get`メソッドに引数として添字を渡して`Option<&T>`を得るものだということです。
218+
2つ目は、3番目の要素を得る2つの方法とは、`&``[]`を使用して参照を得るものと、`get`メソッドに引数として添え字を渡して`Option<&T>`を得るものだということです。
219219

220220
<!--
221221
Rust has two ways to reference an element so you can choose how the program
@@ -225,8 +225,8 @@ that holds five elements and then tries to access an element at index 100, as
225225
shown in Listing 8-6.
226226
-->
227227

228-
Rustのベクタには要素を参照する方法が2通りあるので、ベクタに含まれない要素の添字を使おうとしたときのプログラムの振る舞いを選択できます
229-
例として、ベクタに5つ要素があるとして、添字100の要素にアクセスを試みた場合、プログラムがどうなるのか確認しましょう。
228+
Rustのベクタには要素を参照する方法が2通りあるので、ベクタに含まれない要素の添え字を使おうとしたときのプログラムの振る舞いを選択できます
229+
例として、ベクタに5つ要素があるとして、添え字100の要素にアクセスを試みた場合、プログラムがどうなるのか確認しましょう。
230230
リスト8-6に示します。
231231

232232
```rust,should_panic,panics
@@ -264,12 +264,11 @@ value. That would be more user-friendly than crashing the program due to a typo!
264264
-->
265265

266266
`get`メソッドがベクタ外の添え字を渡されると、パニックすることなく`None`を返します。
267-
普通の状況でもベクタの範囲外にアクセスする可能性がある場合に、このメソッドを使用することになるでしょう。
268-
そうしたら、第6章で議論したように、コードには`Some(&element)``None`を扱うロジックが存在することになります。
269-
例えば、添え字は人間に数値を入力してもらうことで得ているのかもしれません。
270-
もし大きすぎる値を誤って入力し、プログラムが`None`値を得てしまったら、現在ベクタに幾つ要素があるかをユーザに教え、
271-
再度正しい値を入力してもらうことができるでしょう。その方が、(ただの)タイプミスでプログラムをクラッシュさせるより、
272-
ユーザに優しくなるでしょう。
267+
普通の状況でもベクタの範囲外にアクセスする可能性があるなら、このメソッドを使用することになるでしょう。
268+
その場合、第6章で説明したように、コードは`Some(&element)``None`を扱うロジックを持つことになります。
269+
例えば、誰かが入力した数値が添え字になるかもしれません。
270+
もし誤って大きすぎる値を入力し、プログラムが`None`値を得たなら、いまベクタに何要素あるかをユーザに教え、正しい値を再入力してもらうこともできます。
271+
その方が、ただのタイプミスでプログラムをクラッシュさせるより、ユーザに優しいといえそうです。
273272

274273
<!--
275274
When the program has a valid reference, the borrow checker enforces the
@@ -281,11 +280,10 @@ the first element in a vector and try to add an element to the end, which won’
281280
work if we also try to refer to that element later in the function:
282281
-->
283282

284-
プログラムに有効な参照がある場合、借用チェッカー (borrow checker) は (第4章で解説しましたが)、
285-
所有権と借用規則を強制し、ベクタの中身へのこの参照や他のいかなる参照も有効であり続けることを保証してくれます。
283+
プログラムに有効な参照がある場合、借用チェッカー (borrow checker) は、(第4章で解説しましたが)所有権と借用規則を強制し、ベクタの中身へのこの参照や他のいかなる参照も有効であり続けることを保証してくれます。
286284
同一スコープ上では、可変と不変な参照を同時には存在させられないというルールを思い出してください。
287-
このルールはリスト8-7でも適用されています。リスト8-7ではベクタの最初の要素への不変参照を保持しつつ、
288-
終端に要素を追加しようとしています。
285+
このルールはリスト8-7でも適用されています。
286+
リスト8-7ではベクタの最初の要素への不変参照を保持しつつ、終端に要素を追加しようとしています。
289287
関数内のここ以降で、この要素(訳注:`first`のこと)を参照しようとすると失敗します。
290288

291289
```rust,ignore,does_not_compile
@@ -297,13 +295,13 @@ work if we also try to refer to that element later in the function:
297295
while holding a reference to an item</span>
298296
-->
299297

300-
<span class="caption">リスト8-7: 要素への参照を保持しつつ、ベクタに要素を追加しようとする</span>
298+
<span class="caption">リスト8-7要素への参照を保持しつつ、ベクタに要素を追加しようとする</span>
301299

302300
<!--
303301
Compiling this code will result in this error:
304302
-->
305303

306-
このコードをコンパイルすると、こんなエラーになります:
304+
このコードをコンパイルすると、こんなエラーになります
307305

308306
```console
309307
{{#include ../listings/ch08-common-collections/listing-08-07/output.txt}}
@@ -320,12 +318,12 @@ element would be pointing to deallocated memory. The borrowing rules prevent
320318
programs from ending up in that situation.
321319
-->
322320

323-
リスト8-7のコードは、一見動くはずに見えるかもしれません: なぜ、最初の要素への参照が、
324-
ベクタの終端への変更を気にかける必要があるのでしょうか?このエラーは、ベクタの動作する仕組みのせいです:
325-
新規要素をベクタの終端に追加すると、ベクタが現在存在する位置に隣り合って要素を入れるだけの領域がなかった場合に、
326-
メモリを新規に確保して、古い要素をその新しいスペースにコピーする必要があるかもしれないからです
321+
リスト8-7のコードは、一見動きそうに見えるかもしれません。
322+
なぜ最初の要素への参照が、ベクタの終端への変更を気にかける必要があるのでしょうか?
323+
このエラーはベクタが動作するしくみによるものです。
324+
新たな要素をベクタの終端に追加するとき、いまベクタのある場所に全要素を隣り合わせに配置するだけのスペースがないなら、新しいメモリを割り当て、古い要素を新しいスペースにコピーする必要があります
327325
その場合、最初の要素を指す参照は、解放されたメモリを指すことになるでしょう。
328-
借用規則がそのような場面に陥らないよう防いでくれるのです
326+
借用規則がそのような状況に陥らないよう防いでくれるのです
329327

330328
<!--
331329
> Note: For more on the implementation details of the `Vec<T>` type, see [“The
@@ -340,7 +338,7 @@ programs from ending up in that situation.
340338
### Iterating over the Values in a Vector
341339
-->
342340

343-
### ベクタの値を走査する
341+
### ベクタ内の値を順に処理する
344342

345343
<!--
346344
If we want to access each element in a vector in turn, we can iterate through
@@ -350,7 +348,7 @@ in a vector of `i32` values and print them.
350348
-->
351349

352350
ベクタの要素に順番にアクセスしたいなら、添え字で1要素ごとにアクセスするのではなく、全要素を走査することができます。
353-
リスト8-8で`for`ループを使い、`i32`のベクタの各要素に対する不変な参照を得て、それらを出力する方法を示しています
351+
リスト8-8で`for`ループを使い、`i32`のベクタの各要素に対する不変な参照を得て、それらを表示する方法を示します
354352

355353
```rust
356354
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-08/src/main.rs:here}}
@@ -361,16 +359,16 @@ in a vector of `i32` values and print them.
361359
iterating over the elements using a `for` loop</span>
362360
-->
363361

364-
<span class="caption">リスト8-8: `for`ループで要素を走査し、ベクタの各要素を出力する</span>
362+
<span class="caption">リスト8-8`for`ループで要素を走査し、ベクタの各要素を表示する</span>
365363

366364
<!--
367365
We can also iterate over mutable references to each element in a mutable vector
368366
in order to make changes to all the elements. The `for` loop in Listing 8-9
369367
will add `50` to each element.
370368
-->
371369

372-
全要素に変更を加えるために、可変なベクタの各要素への可変な参照を走査することもできます。
373-
リスト8-9の`for`ループでは、各要素に`50`を足しています。
370+
また、全要素に変更を加えるために、可変なベクタの各要素への可変な参照を走査することもできます。
371+
リスト8-9の`for`ループでは各要素に`50`を足しています。
374372

375373
```rust
376374
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-09/src/main.rs:here}}
@@ -381,7 +379,7 @@ will add `50` to each element.
381379
elements in a vector</span>
382380
-->
383381

384-
<span class="caption">リスト8-9: ベクタの要素への可変な参照を走査する</span>
382+
<span class="caption">リスト8-9ベクタの要素への可変な参照を走査する</span>
385383

386384
<!--
387385
To change the value that the mutable reference refers to, we have to use the
@@ -391,9 +389,8 @@ dereference operator (`*`) to get to the value in `i` before we can use the
391389
section of Chapter 15.
392390
-->
393391

394-
可変参照が参照している値を変更するには、`+=`演算子を使用する前に、
395-
参照外し演算子(`*`)を使用して`i`の値に辿り着かないといけません。
396-
参照外し演算子については、15章の[「参照外し演算子で値までポインタを追いかける」][deref]節でより詳しく扱います。
392+
可変参照が参照している値を変更するには、`+=`演算子を使用する前に、参照外し演算子(`*`)を使用して`i`の値にたどり着かないといけません。
393+
参照外し演算子については、第15章の[「参照外し演算子で値までポインタを追いかける」][deref]節でより詳しく扱います。
397394

398395
<!--
399396
### Using an Enum to Store Multiple Types
@@ -409,10 +406,10 @@ variants of an enum are defined under the same enum type, so when we need to
409406
store elements of a different type in a vector, we can define and use an enum!
410407
-->
411408

412-
この章の冒頭で、ベクタは同じ型の値しか保持できないと述べました。これは不便なこともあります;
413-
異なる型の要素を保持する必要性が出てくるユースケースもきっとあります。幸運なことに、
414-
enumの列挙子は、同じenumの型の中に定義されるので、ベクタに異なる型の要素を保持する必要が出たら、
415-
enumを定義して使用すればよいというわけです
409+
この章の冒頭で、ベクタは同じ型の値しか保持できないと述べました。
410+
これは不便なこともあります。
411+
異なる型の要素を保持する必要のあるユースケースは必ず存在します。
412+
幸運なことに、enumの列挙子は同じenumの型の中に定義されるので、ベクタに異なる型の要素を保持する必要が出たら、enumを定義して使用すればよいのです
416413

417414
<!--
418415
For example, say we want to get values from a row in a spreadsheet in which
@@ -423,10 +420,12 @@ that of the enum. Then we can create a vector that holds that enum and so,
423420
ultimately, holds different types. We’ve demonstrated this in Listing 8-10.
424421
-->
425422

426-
例えば、スプレッドシートの行から値を得たくなったとしましょう。ここで行の列には、整数を含むものや、
427-
浮動小数点数を含むもの、文字列を含むものがあります。列挙子が異なる値の型を保持するenumを定義できます。
428-
そして、このenumの列挙子は全て同じ型、つまりenumの型、と考えられるわけです。というわけでそのenumを保持するベクタを生成でき、
429-
結果的に異なる型を保持できるようになるわけです。リスト8-10でこれを実演しています。
423+
例えば、スプレッドシートのある行から値を得ることを考えます。
424+
ここで、その行の中の列には、整数を含むもの、浮動小数点数を含むもの、文字列を含むものがあるとします。
425+
列挙子ごとに異なる値の型を保持するenumが定義できます。
426+
そして、このenumの列挙子は全て同じ型、つまりenumの型、と考えられるわけです。
427+
ですから、そのenumを保持するベクタを作成でき、結果的に異なる型を保持できるようになるわけです。
428+
リスト8-10でこれを実演しています。
430429

431430
```rust
432431
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-10/src/main.rs:here}}
@@ -437,7 +436,7 @@ ultimately, holds different types. We’ve demonstrated this in Listing 8-10.
437436
different types in one vector</span>
438437
-->
439438

440-
<span class="caption">リスト8-10: `enum`を定義して、一つのベクタに異なる型の値を保持する</span>
439+
<span class="caption">リスト8-10`enum`を定義して、一つのベクタに異なる型の値を保持する</span>
441440

442441
<!--
443442
Rust needs to know what types will be in the vector at compile time so it knows
@@ -450,20 +449,20 @@ that Rust will ensure at compile time that every possible case is handled, as
450449
discussed in Chapter 6.
451450
-->
452451

453-
各要素を格納するのにヒープ上でズバリどれくらいのメモリが必要になるかがわかるように、
454-
Rustコンパイラはコンパイル時にベクタに入る型を知る必要があります。また、
455-
このベクタではどんな型が許容されるのか明示できるという副次的な利点があります。もし、Rustコンパイラが、ベクタがどんな型でも保持できるようにしていたら、
456-
ベクタの要素に対して行われる処理に対して一つ以上の型がエラーを引き起こす可能性があるでしょう。
457-
enumに加えて`match`式を使うことは、第6章で議論した通り、あり得るパターン全てに対処していることをRustコンパイラがコンパイル時に保証するということを意味します。
452+
個々の要素を格納するのにヒープ上で必要となるメモリの量を正確に把握するめに、Rustコンパイラはコンパイル時にベクタに入る型を知る必要があります。
453+
また、このベクタではどんな型が許容されるのか明示できるという副次的な利点があります。
454+
もし、Rustコンパイラが、ベクタがどんな型でも保持できるようにしていたら、ベクタの要素に対して行われる処理に対して、いくつかの型がエラーを引き起こすかもしれません。
455+
enumに加えて`match`式を使うことで、第6章で説明したとおり、あらゆるケースを処理できることを、Rustコンパイラがコンパイル時に保証することになります。
458456

459457
<!--
460458
When you’re writing a program, if you don’t know the exhaustive set of types
461459
the program will get at runtime to store in a vector, the enum technique won’t
462460
work. Instead, you can use a trait object, which we’ll cover in Chapter 17.
463461
-->
464462

465-
プログラムを書いている時に、プログラムが実行時に受け取り、ベクタに保持するであろう型のすべてを知っているわけではない場合、
466-
このenumを使ったテクニックはうまくいかないでしょう。代わりにトレイトオブジェクトを使用することができます。こちらは第17章で講義します。
463+
プログラムを書いている時点で、プログラムが実行時に取得し、ベクタに格納し得る全ての型を網羅できない場合には、このenumを使ったテクニックはうまくいかないでしょう。
464+
代わりにトレイトオブジェクトを使用できます。
465+
こちらは第17章で取り上げます。
467466

468467
<!--
469468
Now that we’ve discussed some of the most common ways to use vectors, be sure
@@ -473,10 +472,10 @@ method removes and returns the last element. Let’s move on to the next
473472
collection type: `String`!
474473
-->
475474

476-
今まで議論したのは、ベクタを使用するために最もよく使う方法のいくつか(に過ぎない)です
477-
ですので、標準ライブラリで`Vec<T>`に定義されている多くの有益なメソッドについて、
478-
[APIドキュメント][vec-api]を必ず確認するようにしてください。例えば、`push`に加えて、`pop`というメソッドがあり、これは最後の要素を削除して返します。
479-
それでは次のコレクション型に移りましょう: `String`です
475+
これまでにベクタの代表的な使い方をいくつか紹介しました
476+
標準ライブラリで`Vec<T>`に定義されている多くの有益なメソッドについて、[APIドキュメント][vec-api]を必ず確認するようにしてください。
477+
例えば、`push`に加えて、`pop`というメソッドがあり、これは最後の要素を削除して返します。
478+
それでは次のコレクション型である`String`に移りましょう
480479

481480
<!--
482481
[data-types]: ch03-02-data-types.html#data-types

0 commit comments

Comments
 (0)