2
2
## Storing Lists of Values with Vectors
3
3
-->
4
4
5
- ## ベクタで一連の値を保持する
5
+ ## ベクタで値のリストを保持する
6
6
7
7
<!--
8
8
The first collection type we’ll look at is `Vec<T>`, also known as a *vector*.
@@ -12,9 +12,9 @@ of the same type. They are useful when you have a list of items, such as the
12
12
lines of text in a file or the prices of items in a shopping cart.
13
13
-->
14
14
15
- 最初に見るコレクションは 、` Vec<T> ` であり、* ベクタ* としても知られています。ベクタは、
16
- メモリ上に値を隣り合わせに並べる単独のデータ構造に2つ以上の値を保持させてくれます 。
17
- ベクタには、同じ型の値しか保持できません。要素のリストがある場合に有用です 。
15
+ 最初に見るコレクション型は 、` Vec<T> ` であり、これは * ベクタ* としても知られています。ベクタは、
16
+ メモリ上に値を隣り合わせに並べる単独のデータ構造で、2つ以上の値を保持することができます 。
17
+ ベクタには、同じ型の値しか保持できません。要素のリストがある場合にベクタは有用です 。
18
18
例えば、テキストファイルの各行とか、ショッピングカートのアイテムの価格などです。
19
19
20
20
<!--
@@ -52,8 +52,8 @@ angle brackets. In Listing 8-1, we’ve told Rust that the `Vec<T>` in `v` will
52
52
hold elements of the `i32` type.
53
53
-->
54
54
55
- ここでは、型注釈を付け足したことに注目してください 。このベクタに対して、何も値を挿入していないので、
56
- コンパイラには、どんなデータを保持させるつもりなのかわからないのです 。これは重要な点です。ベクタは、
55
+ ここで、型注釈を付けていることに注目してください 。このベクタに対して、何も値を挿入していないので、
56
+ コンパイラには、私達がどんなデータを保持させるつもりなのかがわからないのです 。これは重要な点です。ベクタは、
57
57
ジェネリクスを使用して実装されているのです; 独自の型でジェネリクスを使用する方法については、
58
58
第10章で解説します。今は、標準ライブラリにより提供されている` Vec<T> ` 型は、どんな型でも保持でき、
59
59
特定のベクタが特定の型を保持するとき、その型は山かっこ内に指定されることを知っておいてください。
@@ -142,7 +142,7 @@ Like any other `struct`, a vector is freed when it goes out of scope, as
142
142
annotated in Listing 8-4.
143
143
-->
144
144
145
- 他のあらゆる` 構造体 ` 同様、ベクタもスコープを抜ければ、解放されます。リスト8-4に注釈したようにですね。
145
+ 他のあらゆる` struct ` (構造体) 同様、ベクタもスコープを抜ければ、解放されます。リスト8-4に注釈したようにですね。
146
146
147
147
148
148
``` rust
@@ -164,7 +164,7 @@ introduce references to the elements of the vector. Let’s tackle that next!
164
164
-->
165
165
166
166
ベクタがドロップされると、その中身もドロップされます。つまり、保持されていた整数値が、
167
- 片付けられるということです。これは一見単純な点に見えるかもしれませんが 、ベクタの要素への参照を導入した途端、
167
+ 片付けられるということです。これは一見単純に見えるかもしれませんが 、ベクタの要素への参照を導入した途端、
168
168
もうちょっと複雑になる可能性を秘めています。次は、それに挑んでいきましょう!
169
169
170
170
<!--
@@ -180,8 +180,8 @@ value stored in a vector. In the examples, we’ve annotated the types of the
180
180
values that are returned from these functions for extra clarity.
181
181
-->
182
182
183
- もうベクタを生成し 、更新し、破壊する方法を知ったので、中身を読む方法を知るのはいいステップアップです 。
184
- ベクタに保持された値を参照する方法は2つあります。例では、さらなる明瞭性を求めて 、
183
+ ベクタを生成し 、更新し、破壊する方法を知ったので、中身を読む方法を次に知ることにしましょう 。
184
+ ベクタに保持された値を参照する方法は2つあります。これから示す例では、さらに明確にするため 、
185
185
これらの関数から返る値の型を注釈しました。
186
186
187
187
<!--
@@ -211,8 +211,8 @@ us an `Option<&T>`.
211
211
-->
212
212
213
213
ここでは、2つのことに注目してください。まず、3番目の要素を得るのに` 2 ` という添え字の値を使用していることです:
214
- ベクタは、数値により順序付けされ、添え字は0から始まります。2番目に、3番目の要素を得る2つの方法は 、
215
- ` & ` と` [] ` を使用して参照を得るものと、番号を引数として` get ` メソッドに渡して、` Option<&T> ` を得るものということです 。
214
+ ベクタは、数値により順序付けされ、添え字は0から始まります。2番目に、3番目の要素を得る2つの方法とは 、
215
+ ` & ` と` [] ` を使用して参照を得るものと、番号を引数として` get ` メソッドに渡して、` Option<&T> ` を得るものだということです 。
216
216
217
217
<!--
218
218
Rust has two ways to reference an element so you can choose how the program
@@ -223,8 +223,8 @@ shown in Listing 8-6.
223
223
-->
224
224
225
225
Rustには要素を参照する方法が2通りあるので、ベクタに要素が含まれない番号の値を使用しようとした時に、
226
- プログラムの振る舞いを選択できます。例として、ベクタに5つ要素があり 、添え字100の要素にアクセスを試みた場合、
227
- プログラムがすることを確認しましょう 。リスト8-6に示したようにですね。
226
+ プログラムの振る舞いを選択できます。例として、ベクタに5つ要素があるとして 、添え字100の要素にアクセスを試みた場合、
227
+ プログラムがどうなるのか確認しましょう 。リスト8-6に示したようにですね。
228
228
229
229
``` rust,should_panic,panics
230
230
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-06/src/main.rs:here}}
@@ -260,11 +260,11 @@ value. That would be more user-friendly than crashing the program due to a typo!
260
260
-->
261
261
262
262
` get ` メソッドがベクタ外の添え字を渡されると、パニックすることなく` None ` を返します。
263
- 普通の状態でも、ベクタの範囲外にアクセスする可能性がある場合に 、このメソッドを使用することになるでしょう。
264
- そうしたら、コードには` Some(&element) ` か` None ` を扱うロジックが存在することになります。そう、
265
- 第6章で議論したように。 例えば、添え字は人間に数値を入力してもらうことで得ることもできます 。
263
+ 普通の状況でもベクタの範囲外にアクセスする可能性がある場合に 、このメソッドを使用することになるでしょう。
264
+ そうしたら、第6章で議論したように、 コードには` Some(&element) ` か` None ` を扱うロジックが存在することになります。
265
+ 例えば、添え字は人間に数値を入力してもらうことで得ているのかもしれません 。
266
266
もし大きすぎる値を誤って入力し、プログラムが` None ` 値を得てしまったら、現在ベクタに幾つ要素があるかをユーザに教え、
267
- 再度正しい値を入力してもらうことができるでしょう。その方が、タイプミスでプログラムをクラッシュさせるより、
267
+ 再度正しい値を入力してもらうことができるでしょう。その方が、(ただの) タイプミスでプログラムをクラッシュさせるより、
268
268
ユーザに優しくなるでしょう。
269
269
270
270
<!--
@@ -277,12 +277,12 @@ the first element in a vector and try to add an element to the end, which won’
277
277
work if we also try to refer to that element later in the function:
278
278
-->
279
279
280
- プログラムに有効な参照がある場合、借用チェッカー(borrow checker)は( 第4章で解説しましたが) 、
280
+ プログラムに有効な参照がある場合、借用チェッカー (borrow checker) は ( 第4章で解説しましたが) 、
281
281
所有権と借用規則を強制し、ベクタの中身へのこの参照や他のいかなる参照も有効であり続けることを保証してくれます。
282
282
同一スコープ上では、可変と不変な参照を同時には存在させられないというルールを思い出してください。
283
- このルールはリスト8-7にも適用され、 リスト8-7ではベクタの最初の要素への不変参照を保持し 、
283
+ このルールはリスト8-7でも適用されています。 リスト8-7ではベクタの最初の要素への不変参照を保持しつつ 、
284
284
終端に要素を追加しようとしています。
285
- もし、 関数内のここ以降で、この要素を参照しようとしている場合、これは動きません 。
285
+ 関数内のここ以降で、この要素(訳注: ` first ` のこと)を参照しようとすると失敗します 。
286
286
287
287
``` rust,ignore,does_not_compile
288
288
{{#rustdoc_include ../listings/ch08-common-collections/listing-08-07/src/main.rs:here}}
@@ -316,21 +316,19 @@ element would be pointing to deallocated memory. The borrowing rules prevent
316
316
programs from ending up in that situation.
317
317
-->
318
318
319
- リスト8-7のコードは、一見動くはずのように見えるかもしれません : なぜ、最初の要素への参照が、
320
- ベクタの終端への変更を気にかける必要があるのでしょうか?このエラーは、ベクタの動作法のせいです :
319
+ リスト8-7のコードは、一見動くはずに見えるかもしれません : なぜ、最初の要素への参照が、
320
+ ベクタの終端への変更を気にかける必要があるのでしょうか?このエラーは、ベクタの動作する仕組みのせいです :
321
321
新規要素をベクタの終端に追加すると、ベクタが現在存在する位置に隣り合って要素を入れるだけの領域がなかった場合に、
322
- メモリの新規確保をして古い要素を新しいスペースにコピーする必要があるかもしれないからです 。
323
- その場合、最初の要素を指す参照は、解放されたメモリを指すことになるでしょう。借用規則により、
324
- そのような場面に陥らないよう回避されるのです 。
322
+ メモリを新規に確保して、古い要素をその新しいスペースにコピーする必要があるかもしれないからです 。
323
+ その場合、最初の要素を指す参照は、解放されたメモリを指すことになるでしょう。
324
+ 借用規則がそのような場面に陥らないよう防いでくれるのです 。
325
325
326
326
<!--
327
327
> Note: For more on the implementation details of the `Vec<T>` type, see [“The
328
328
> Rustonomicon”][nomicon].
329
329
-->
330
330
331
- > 注釈: ` Vec<T> ` の実装に関する詳細については、[ “The Rustonomicon”] [ nomicon ] を参照してください。
332
-
333
- > 訳注: 日本語版のThe Rustonomiconは[ こちら] [ nomicon-ja-vec ] です。
331
+ > 注釈: ` Vec<T> ` の実装に関する詳細については、[ “The Rustonomicon”] [ nomicon ] を参照してください (訳注:日本語版は[ こちら] [ nomicon-ja-vec ] です)。
334
332
335
333
[ nomicon-ja-vec ] : https://doc.rust-jp.rs/rust-nomicon-ja/vec.html
336
334
@@ -347,7 +345,7 @@ all of the elements rather than use indices to access one at a time. Listing
347
345
in a vector of `i32` values and print them.
348
346
-->
349
347
350
- ベクタの要素に順番にアクセスしたいなら、添え字で1回に1要素にアクセスするのではなく 、全要素を走査することができます。
348
+ ベクタの要素に順番にアクセスしたいなら、添え字で1要素ごとにアクセスするのではなく 、全要素を走査することができます。
351
349
リスト8-8で` for ` ループを使い、` i32 ` のベクタの各要素に対する不変な参照を得て、それらを出力する方法を示しています。
352
350
353
351
``` rust
@@ -367,7 +365,7 @@ in order to make changes to all the elements. The `for` loop in Listing 8-9
367
365
will add `50` to each element.
368
366
-->
369
367
370
- 全要素に変更を加える目的で 、可変なベクタの各要素への可変な参照を走査することもできます。
368
+ 全要素に変更を加えるために 、可変なベクタの各要素への可変な参照を走査することもできます。
371
369
リスト8-9の` for ` ループでは、各要素に` 50 ` を足しています。
372
370
373
371
``` rust
@@ -408,9 +406,9 @@ store elements of a different type in a vector, we can define and use an enum!
408
406
-->
409
407
410
408
この章の冒頭で、ベクタは同じ型の値しか保持できないと述べました。これは不便なこともあります;
411
- 異なる型の要素を保持する必要性が出てくるユースケースも確かにあるわけです 。幸運なことに、
412
- enumの列挙子は、同じenumの型の元に定義されるので 、ベクタに異なる型の要素を保持する必要が出たら、
413
- enumを定義して使用することができます !
409
+ 異なる型の要素を保持する必要性が出てくるユースケースもきっとあります 。幸運なことに、
410
+ enumの列挙子は、同じenumの型の中に定義されるので 、ベクタに異なる型の要素を保持する必要が出たら、
411
+ enumを定義して使用すればよいというわけです !
414
412
415
413
<!--
416
414
For example, say we want to get values from a row in a spreadsheet in which
@@ -423,8 +421,8 @@ ultimately, holds different types. We’ve demonstrated this in Listing 8-10.
423
421
424
422
例えば、スプレッドシートの行から値を得たくなったとしましょう。ここで行の列には、整数を含むものや、
425
423
浮動小数点数を含むもの、文字列を含むものがあります。列挙子が異なる値の型を保持するenumを定義できます。
426
- そして、このenumの列挙子は全て同じ型: enumの型と考えられるわけです。それからそのenumを保持するベクタを生成でき 、
427
- 結果的に異なる型を保持できるようになるわけです。リスト8-10でこれを模擬しています 。
424
+ そして、このenumの列挙子は全て同じ型、つまりenumの型、と考えられるわけです。というわけでそのenumを保持するベクタを生成でき 、
425
+ 結果的に異なる型を保持できるようになるわけです。リスト8-10でこれを実演しています 。
428
426
429
427
``` rust
430
428
{{#rustdoc_include .. / listings / ch08 - common - collections / listing - 08 - 10 / src / main . rs: here }}
@@ -448,21 +446,20 @@ that Rust will ensure at compile time that every possible case is handled, as
448
446
discussed in Chapter 6.
449
447
-->
450
448
451
- 各要素を格納するのにヒープ上でズバリどれくらいのメモリが必要になるかをわかるように、
452
- コンパイラがコンパイル時にベクタに入る型を知る必要があります。副次的な利点は、
453
- このベクタではどんな型が許容されるのか明示できることです。もしRustでベクタがどんな型でも保持できたら、
454
- ベクタの要素に対して行われる処理に対して一つ以上の型がエラーを引き起こす可能性があったでしょう。
455
- enumに加えて` match ` 式を使うことは、第6章で議論した通り、コンパイル時にありうる場合全てに対処していることをコンパイラが、
456
- 保証できることを意味します。
449
+ 各要素を格納するのにヒープ上でズバリどれくらいのメモリが必要になるかがわかるように、
450
+ Rustコンパイラはコンパイル時にベクタに入る型を知る必要があります。また、
451
+ このベクタではどんな型が許容されるのか明示できるという副次的な利点があります。もし、Rustコンパイラが、ベクタがどんな型でも保持できるようにしていたら、
452
+ ベクタの要素に対して行われる処理に対して一つ以上の型がエラーを引き起こす可能性があるでしょう。
453
+ enumに加えて` match ` 式を使うことは、第6章で議論した通り、あり得るパターン全てに対処していることをRustコンパイラがコンパイル時に保証するということを意味します。
457
454
458
455
<!--
459
456
When you’re writing a program, if you don’t know the exhaustive set of types
460
457
the program will get at runtime to store in a vector, the enum technique won’t
461
458
work. Instead, you can use a trait object, which we’ll cover in Chapter 17.
462
459
-->
463
460
464
- プログラム記述時にプログラムがベクタに実行時に保持するありとあらゆる一連の型をプログラマが知らない場合 、
465
- このenumテクニックはうまく動かないでしょう。代わりにトレイトオブジェクトを使用することができ、 こちらは第17章で講義します。
461
+ プログラムを書いている時に、プログラムが実行時に受け取り、ベクタに保持するであろう型のすべてを知っているわけではない場合 、
462
+ このenumを使ったテクニックはうまくいかないでしょう。代わりにトレイトオブジェクトを使用することができます。 こちらは第17章で講義します。
466
463
467
464
<!--
468
465
Now that we’ve discussed some of the most common ways to use vectors, be sure
@@ -472,13 +469,10 @@ method removes and returns the last element. Let’s move on to the next
472
469
collection type: `String`!
473
470
-->
474
471
475
- <!--
476
- 1行目、discussed some of を「について触れ、議論した」と訳した
477
- -->
478
-
479
- 今や、ベクタを使用するべき最も一般的な方法について触れ、議論したので、標準ライブラリで` Vec<T> ` に定義されている多くの有益なメソッドについては、
480
- [ APIドキュメント] [ vec-api ] を確認することを心得てください。例として、` push ` に加えて、` pop ` メソッドは最後の要素を削除して返します。
481
- 次のコレクション型に移りましょう: ` String ` です!
472
+ 今まで議論したのは、ベクタを使用するために最もよく使う方法のいくつか(に過ぎない)です。
473
+ ですので、標準ライブラリで` Vec<T> ` に定義されている多くの有益なメソッドについて、
474
+ [ APIドキュメント] [ vec-api ] を必ず確認するようにしてください。例えば、` push ` に加えて、` pop ` というメソッドがあり、これは最後の要素を削除して返します。
475
+ それでは次のコレクション型に移りましょう: ` String ` です!
482
476
483
477
<!--
484
478
[data-types]: ch03-02-data-types.html#data-types
0 commit comments