From d99c5e15e312c2b19c1a7e84ac657a29cac3a544 Mon Sep 17 00:00:00 2001 From: "tsubasa.kat" Date: Tue, 22 Oct 2019 16:42:55 +0900 Subject: [PATCH 1/3] Translate the page "Keyword lists and maps" Issue #50 --- _po/ja.po | 90 ++++++++++++++----- _po/ja/getting-started/keywords-and-maps.po | 88 +++++++++++++----- _po/ja/getting-started/keywords-and-maps.pot | 2 +- ja/getting-started/keywords-and-maps.markdown | 82 ++++++++--------- 4 files changed, 177 insertions(+), 85 deletions(-) diff --git a/_po/ja.po b/_po/ja.po index b2f9f7550..a471271cd 100644 --- a/_po/ja.po +++ b/_po/ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"PO-Revision-Date: 2019-06-22 19:53+0900\n" +"PO-Revision-Date: 2018-08-11 01:00+0900\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1265,6 +1265,9 @@ msgid "" " * Keys are ordered, as specified by the developer.\n" " * Keys can be given more than once." msgstr "" +" * キーはアトムである\n" +" * キーは開発者が指定した通りに並ぶ\n" +" * キーはいくつでも与えられる" msgid "" " * Local because keys and values are only accessible to the current node (opp" @@ -1279,6 +1282,8 @@ msgid "" " * Maps allow any value as a key.\n" " * Maps' keys do not follow any ordering." msgstr "" +" * マップはどんな値もキーにできる\n" +" * マップのキーは順序がない" msgid "" " * Maps can now scale from dozens to millions of keys. Therefore, usage of th" @@ -3273,7 +3278,7 @@ msgid "## Interpolation and escaping in sigils" msgstr "" msgid "## Keyword lists" -msgstr "" +msgstr "## キーワードリスト" msgid "## Language improvements" msgstr "" @@ -3309,7 +3314,7 @@ msgid "## Macros hygiene" msgstr "" msgid "## Maps" -msgstr "" +msgstr "## マップ" msgid "## Maps, structs and the future" msgstr "" @@ -3354,7 +3359,7 @@ msgid "## Nested access" msgstr "" msgid "## Nested data structures" -msgstr "" +msgstr "## ネストされたデータ構造" msgid "## Notable differences" msgstr "" @@ -4710,6 +4715,11 @@ msgid "" "redirect_from: /getting-started/maps-and-dicts.html\n" "---" msgstr "" +"---\n" +"layout: getting-started\n" +"title: キーワードリストとマップ\n" +"redirect_from: /getting-started/maps-and-dicts.html\n" +"---" msgid "" "---\n" @@ -6168,6 +6178,10 @@ msgid "" "consider using [the `HashDict` module](https://hexdocs.pm/elixir/HashDict.html" ")." msgstr "" +"Note: マップは最近になって Erlang VM に導入されたばかりで、何百万" +"という沢山のキーを効率的に保持できるのは Elixir v1.2 以降だけです。もしも今、あなたが以前のバージョンの Elixir (v1.0 or v1." +"1) を使っていて、少なくとも数百のキーをサポートする必要があるなら、[`HashDict` モジュール](https://hexdocs.pm/elixi" +"r/HashDict.html) の使用を検討してもよいかも知れません。" msgid "" "> Note: Mix is an Elixir executable. This means that in order to run `mix`, yo" @@ -6794,7 +6808,7 @@ msgid "" "Although we can pattern match on keyword lists, it is rarely done in practice " "since pattern matching on lists requires the number of items and their order t" "o match:" -msgstr "" +msgstr "キーワードリストでパターンマッチを利用できるのですが、要素の数とその順序が一致している必要がある為に殆ど利用されません。" msgid "" "Although we have overlooked some details, this is the main idea behind creatin" @@ -6963,7 +6977,7 @@ msgstr "" msgid "" "Another interesting property of maps is that they provide their own syntax for" " accessing atom keys:" -msgstr "" +msgstr "マップのもう一つ興味深い特質として、アトムのキーにアクセスする独自の構文が用意されていることが挙げられます。" msgid "" "Another issue with the solution above is that the `Enum.flat_map/2` step will " @@ -7080,7 +7094,7 @@ msgstr "" msgid "" "As shown above, a map matches as long as the keys in the pattern exist in the " "given map. Therefore, an empty map matches all maps." -msgstr "" +msgstr "見ての通り、パターン内のキーが与えられたマップ内に存在する間はマッチします。よって、空のマップは完全にどのマップとも一致します。" msgid "" "As soon as we started working on Logger, we realized we could go further than " @@ -7167,6 +7181,8 @@ msgid "" "e keyword lists are lists, we can use all operations available to lists. For e" "xample, we can use `++` to add new values to a keyword list:" msgstr "" +"上のコードで分かる通り、Elixir は同じことを `[key: value]` という風に書ける特別な構文をサポートしています。キーワードリストはリストで" +"すから、リストに対して行える全ての操作がキーワードリストにも利用できます。例えば、新しく値を追加する為に `++` を使うことができます。" msgid "" "As you can see in the example, tuples are a compound type and each tuple is id" @@ -7642,7 +7658,7 @@ msgstr "" "推奨されますが、人気があることが提案が受け入れられることを意味するものではありません。" msgid "Compared to keyword lists, we can already see two differences:" -msgstr "" +msgstr "キーワードリストと比較すると二つの違いが見て取れます。" msgid "" "Comprehensions discard all elements for which the filter expression returns `f" @@ -8022,6 +8038,10 @@ msgid "" "s insight and examples on how you get more concise and faster software by writ" "ing assertive code in Elixir." msgstr "" +"一般的に Elixir を使う開発者は、マップを用いた操作で `Map` モジュールの関数を使うよりも、パターンマッチと `map.field` という構文" +"を好んで使います。その方が確定的なコードを書けるようになるからです。[このブログ記事](http://blog.plataformatec.com.br/2" +"014/09/writing-assertive-code-with-elixir/) では、Elixir の確定的なコードで如何に簡潔かつ高速なソフトウェ" +"アを手に入れるかの例と洞察を紹介しています。" msgid "Elixir developers will often use module attributes as constants:" msgstr "" @@ -9201,6 +9221,8 @@ msgid "" "For example, [the Ecto library](https://github.com/elixir-lang/ecto) makes use" " of these features to provide an elegant DSL for writing database queries:" msgstr "" +"例えば、[Ecto ライブラリ](https://github.com/elixir-lang/ecto) ではデータベースのクエリを書く為に使われる洗練さ" +"れた DSL を提供する為にそれら機能を利用しています。" msgid "" "For example, a bitstring generator can be used with the `:into` option in orde" @@ -10188,7 +10210,7 @@ msgid "" msgstr "" msgid "Imagine you have the following structure:" -msgstr "" +msgstr "以下のような構造があるとします。" msgid "" "Imagine you manually implemented `unless` as a macro, that does the opposite o" @@ -10311,7 +10333,7 @@ msgstr "" msgid "" "In Elixir, we have two main associative data structures: keyword lists and map" "s. It's time to learn more about them!" -msgstr "" +msgstr "Elixir では主にキーワードリストとマップという二つの連想データ構造があります。これらについて学んでいきましょう。" msgid "In Elixir, you can define a binary using `<<>>`:" msgstr "" @@ -10414,7 +10436,7 @@ msgid "" "In contrast to keyword lists, maps are very useful with pattern matching. When" " a map is used in a pattern, it will always match on a subset of the given val" "ue:" -msgstr "" +msgstr "キーワードリストと違ってマップのパターンマッチは非常に有用です。パターンにマップを使うと、与えられた値のサブセットとマッチします。" msgid "" "In fact if you compile any Elixir code, including the Elixir source, you will " @@ -10432,7 +10454,7 @@ msgstr "" msgid "" "In general, when the keyword list is the last argument of a function, the squa" "re brackets are optional." -msgstr "" +msgstr "一般的にキーワードリストが関数の最後の引数である時は、角括弧を任意で省略できます。" msgid "" "In light of this observation, we should consider moving to another supervision" @@ -10456,6 +10478,8 @@ msgid "" "e have a list of tuples and the first item of the tuple (i.e. the key) is an a" "tom, we call it a keyword list:" msgstr "" +"大抵の関数型プログラミング言語は、キーと値を表現する為にタプルのリストを使うのが一般的です。Elixir では、タプルの最初にキーとしてアトムを使っているリ" +"ストのことを、キーワードリストと呼んでいます。" msgid "" "In order for the cache mechanism to work, the created ETS table needs to have " @@ -10552,6 +10576,10 @@ msgid "" " guarantee one-key associates with at maximum one-value, you should use maps i" "nstead." msgstr "" +"Elixir はキーワードリストを操作する為に [`Keyword` モジュール](https://hexdocs.pm/elixir/Keyword.ht" +"ml) を提供しています。ただし、キーワードリストは単なるリストであり、それ自体はリストとして同じ線形的な運用特性があることは覚えておいてください。リストが" +"長いほどキーの検索や要素数のカウントに時間がかかります。その理由は、Elixir のキーワードリストが主にオプション値を渡す為に使われる為です。要素をたくさ" +"ん保持したり、一つのキーが一つの値とだけ関連づけられることの保証が必要な場合は、キーワードリストの代わりにマップを使うべきです。" msgid "" "In order to run Elixir on the LING VM, you need to produce a Xen image of your" @@ -11241,7 +11269,7 @@ msgid "" msgstr "" msgid "It happens we can also use this same syntax for updating the value:" -msgstr "" +msgstr "これと同じ構文を値の更新に使うこともできます。" msgid "" "It is also possible to create atoms that start with a character other than a l" @@ -11393,7 +11421,7 @@ msgid "" msgstr "" msgid "Keyword lists are important because they have three special characteristics:" -msgstr "" +msgstr "キーワードリストは以下に挙げる 3 つに特徴づけられた重要なものです。" msgid "" "Keyword lists play an important role in the language and are quite common in m" @@ -11819,7 +11847,7 @@ msgid "Maps do not have a explicit ordering and keys and values can be any term. msgstr "" msgid "Maps have the following syntax for updating a key's value:" -msgstr "" +msgstr "マップはキーが持つ値を更新する為に以下の構文をサポートします。" msgid "" "Maps naturally solve issues `1.` and `2.` above. In particular, maps that have" @@ -12267,7 +12295,7 @@ msgid "" msgstr "" msgid "Note that values added to the front are the ones fetched on lookup:" -msgstr "" +msgstr "探索する際に引き出される値が先頭に追加された値であることに注意してください。" msgid "" "Note that we have also defined a private function named `lookup/2` to help wit" @@ -12638,6 +12666,8 @@ msgid "" "s you would find in imperative languages while keeping the immutable propertie" "s of the language." msgstr "" +"マップの中でさらにマップやキーワードリスト等が必要なケースが往々にしてあります。Elixir は `put_in/2` や `update_in/2` 及び" +"、命令型言語に見られるものと同様に便利なその他のマクロよって、属性をイミュータブルに保ったまま多次元のデータ構造を操作するという利便性を提供しています。" msgid "" "On **Unix systems**, you need to [find your shell profile file](https://unix.s" @@ -13627,6 +13657,8 @@ msgid "" "Different languages call these different names like dictionaries, hashes, asso" "ciative arrays, etc." msgstr "" +"今までのところ、とある値をキーと関連づけすることが出来るようなデータ構造についてまだ触れていません。言語によってはそういうデータ構造のことを辞書、ハッシュ、" +"あるいは連想配列という風に異なる名前で呼んでいます。" msgid "" "So far, all examples have used `/` to delimit a regular expression. However, s" @@ -14172,7 +14204,7 @@ msgstr "" msgid "" "The `do:` and `else:` pairs are keyword lists! In fact, the call above is equi" "valent to:" -msgstr "" +msgstr "`do:` と `else:` という二つのペアはキーワードリストなのです!実際に上記の呼び出しは以下と同等です。" msgid "" "The `do_interleave` function first calls `a` (`af` from `interleave`) with the" @@ -14260,6 +14292,8 @@ msgid "" "ols how the value changes. For example, let's remove \"Clojure\" from Mary's lis" "t of languages:" msgstr "" +"マクロ `update_in/2` もこれと似ていますが、値をどのように変更するかを制御する為に関数を渡すことができます。例えば、Mary の言語リストから" +" \"Clojure\" を削除してみましょう。" msgid "" "The `use` macro is frequently used as an extension point. This means that, whe" @@ -15255,6 +15289,8 @@ msgid "" " keys. For example, using it with the `:c` key failed because there is no `:c`" " in the map." msgstr "" +"上記の構文は与えられたキーが存在する必要があります。これを新しいキーの追加には使えません。`:c` というキーを使った例では、マップ内に `:c` が存在し" +"ないので失敗しています。" msgid "" "The syntax for sending and receiving differs only slightly between Erlang and " @@ -15452,6 +15488,10 @@ msgid "" "ocumentation in the `Kernel` module for more information](https://hexdocs.pm/e" "lixir/Kernel.html)." msgstr "" +"値を取り除いたり、データ構造を一度に更新するのことができる `get_and_update_in/2` も含めて `put_in/2` と `update_" +"in/2` をもっと知る必要があるでしょう。動的にデータ構造へアクセスできる `put_in/3` と `update_in/3` 、 `get_and_u" +"pdate_in/3` もあります。それぞれの詳しいドキュメントは [`Kernel` モジュール](https://hexdocs.pm/elixir/K" +"ernel.html) を参照してください。" msgid "" "There is much more to Mix, and we will continue to explore it as we build our " @@ -15508,6 +15548,8 @@ msgid "" "ism for passing options to functions in Elixir. In chapter 5, when we discusse" "d the `if/2` macro, we mentioned the following syntax is supported:" msgstr "" +"Elixir で関数にオプションを渡す手法がキーワードリストとなっているのは、これらの特性によるきっかけです。5 章でマクロの `if/2` について触れた" +"時に、以下のような構文がサポートされていることを言及しました。" msgid "" "These expectations also apply to future releases under the v1 branch, except f" @@ -15625,6 +15667,8 @@ msgid "" "will find out that, given keyword lists and maps, you will always have the rig" "ht tool to tackle problems that require associative data structures in Elixir." msgstr "" +"ここで Elixir における連想データ構造の紹介を終わりとします。キーワードリストとマップがある時に、あなたはいつでも連想データ構造を必要とする問題に立ち" +"向かう為の適切なツールがあることが分かると思います。" msgid "" "This concludes our optimization chapter. We have used ETS as a cache mechanism" @@ -16413,7 +16457,7 @@ msgid "" msgstr "" msgid "Variables can be used when accessing, matching and adding map keys:" -msgstr "" +msgstr "変数を使って値にアクセスしたり、マッチングやキーを追加することが出来ます。" msgid "Variables in Elixir can be rebound:" msgstr "Elixir の変数は再代入ができます。" @@ -16734,7 +16778,7 @@ msgid "" "We have a keyword list of users where each value is a map containing the name," " age and a list of programming languages each user likes. If we wanted to acce" "ss the age for john, we could write:" -msgstr "" +msgstr "名前と年齢、そして各ユーザーが好きな言語リストで構成されるマップを含んだキーワードリストがあります。John の年齢にアクセスしたい時はこう書きます。" msgid "" "We have added a new `:env` key to the application. It returns the application " @@ -17197,7 +17241,7 @@ msgstr "" msgid "" "When all the keys in a map are atoms, you can use the keyword syntax for conve" "nience:" -msgstr "" +msgstr "マップ内のすべてのキーがアトムの時は便利なキーワード構文を使って簡潔に書けます。" msgid "When asking questions, remember these two tips:" msgstr "質問する際は以下の二点を念頭においてください。" @@ -17435,7 +17479,7 @@ msgstr "" msgid "" "Whenever you need a key-value store, maps are the \"go to\" data structure in El" "ixir. A map is created using the `%{}` syntax:" -msgstr "" +msgstr "キーと値のペアで保持したいものがある時にはマップが打ってつけのデータ構造です。マップは `%{}` という構文を使って作成します。" msgid "Which can also be used for partially applying functions and macros:" msgstr "" @@ -17447,7 +17491,7 @@ msgid "" msgstr "" msgid "Which, as we have seen above, is the same as:" -msgstr "" +msgstr "以下もまた上記と同じように、どちらも等しいものです。" msgid "" "While Elixir allows any metadata to be given, those tools currently exhibit on" @@ -18094,6 +18138,8 @@ msgid "" "[The `Map` module](https://hexdocs.pm/elixir/Map.html) provides a very similar" " API to the `Keyword` module with convenience functions to manipulate maps:" msgstr "" +"[`Map` モジュール](https://hexdocs.pm/elixir/Map.html) は `Keyword` モジュールが備えている便利な関数" +"とよく似た API をマップの操作の為に提供しています。" msgid "" "[The `math` module](http://erlang.org/doc/man/math.html) contains common\n" diff --git a/_po/ja/getting-started/keywords-and-maps.po b/_po/ja/getting-started/keywords-and-maps.po index 8ba2fc4c6..f1b45b8fd 100644 --- a/_po/ja/getting-started/keywords-and-maps.po +++ b/_po/ja/getting-started/keywords-and-maps.po @@ -15,6 +15,11 @@ msgid "" "redirect_from: /getting-started/maps-and-dicts.html\n" "---" msgstr "" +"---\n" +"layout: getting-started\n" +"title: キーワードリストとマップ\n" +"redirect_from: /getting-started/maps-and-dicts.html\n" +"---" msgid "# {{ page.title }}" msgstr "" @@ -28,14 +33,16 @@ msgid "" "Different languages call these different names like dictionaries, hashes, asso" "ciative arrays, etc." msgstr "" +"今までのところ、とある値をキーと関連づけすることが出来るようなデータ構造についてまだ触れていません。言語によってはそういうデータ構造のことを辞書、ハッシュ、" +"あるいは連想配列という風に異なる名前で呼んでいます。" msgid "" "In Elixir, we have two main associative data structures: keyword lists and map" "s. It's time to learn more about them!" -msgstr "" +msgstr "Elixir では主にキーワードリストとマップという二つの連想データ構造があります。これらについて学んでいきましょう。" msgid "## Keyword lists" -msgstr "" +msgstr "## キーワードリスト" msgid "" "In many functional programming languages, it is common to use a list of 2-item" @@ -43,6 +50,8 @@ msgid "" "e have a list of tuples and the first item of the tuple (i.e. the key) is an a" "tom, we call it a keyword list:" msgstr "" +"大抵の関数型プログラミング言語は、キーと値を表現する為にタプルのリストを使うのが一般的です。Elixir では、タプルの最初にキーとしてアトムを使っているリ" +"ストのことを、キーワードリストと呼んでいます。" msgid "" "```iex\n" @@ -59,6 +68,8 @@ msgid "" "e keyword lists are lists, we can use all operations available to lists. For e" "xample, we can use `++` to add new values to a keyword list:" msgstr "" +"上のコードで分かる通り、Elixir は同じことを `[key: value]` という風に書ける特別な構文をサポートしています。キーワードリストはリストで" +"すから、リストに対して行える全ての操作がキーワードリストにも利用できます。例えば、新しく値を追加する為に `++` を使うことができます。" msgid "" "```iex\n" @@ -70,7 +81,7 @@ msgid "" msgstr "" msgid "Note that values added to the front are the ones fetched on lookup:" -msgstr "" +msgstr "探索する際に引き出される値が先頭に追加された値であることに注意してください。" msgid "" "```iex\n" @@ -82,18 +93,23 @@ msgid "" msgstr "" msgid "Keyword lists are important because they have three special characteristics:" -msgstr "" +msgstr "キーワードリストは以下に挙げる 3 つに特徴づけられた重要なものです。" msgid "" " * Keys must be atoms.\n" " * Keys are ordered, as specified by the developer.\n" " * Keys can be given more than once." msgstr "" +" * キーはアトムである\n" +" * キーは開発者が指定した通りに並ぶ\n" +" * キーはいくつでも与えられる" msgid "" "For example, [the Ecto library](https://github.com/elixir-lang/ecto) makes use" " of these features to provide an elegant DSL for writing database queries:" msgstr "" +"例えば、[Ecto ライブラリ](https://github.com/elixir-lang/ecto) ではデータベースのクエリを書く為に使われる洗練さ" +"れた DSL を提供する為にそれら機能を利用しています。" msgid "" "```elixir\n" @@ -109,6 +125,8 @@ msgid "" "ism for passing options to functions in Elixir. In chapter 5, when we discusse" "d the `if/2` macro, we mentioned the following syntax is supported:" msgstr "" +"Elixir で関数にオプションを渡す手法がキーワードリストとなっているのは、これらの特性によるきっかけです。5 章でマクロの `if/2` について触れた" +"時に、以下のような構文がサポートされていることを言及しました。" msgid "" "```iex\n" @@ -120,7 +138,7 @@ msgstr "" msgid "" "The `do:` and `else:` pairs are keyword lists! In fact, the call above is equi" "valent to:" -msgstr "" +msgstr "`do:` と `else:` という二つのペアはキーワードリストなのです!実際に上記の呼び出しは以下と同等です。" msgid "" "```iex\n" @@ -130,7 +148,7 @@ msgid "" msgstr "" msgid "Which, as we have seen above, is the same as:" -msgstr "" +msgstr "以下もまた上記と同じように、どちらも等しいものです。" msgid "" "```iex\n" @@ -142,13 +160,13 @@ msgstr "" msgid "" "In general, when the keyword list is the last argument of a function, the squa" "re brackets are optional." -msgstr "" +msgstr "一般的にキーワードリストが関数の最後の引数である時は、角括弧を任意で省略できます。" msgid "" "Although we can pattern match on keyword lists, it is rarely done in practice " "since pattern matching on lists requires the number of items and their order t" "o match:" -msgstr "" +msgstr "キーワードリストでパターンマッチを利用できるのですが、要素の数とその順序が一致している必要がある為に殆ど利用されません。" msgid "" "```iex\n" @@ -173,14 +191,18 @@ msgid "" " guarantee one-key associates with at maximum one-value, you should use maps i" "nstead." msgstr "" +"Elixir はキーワードリストを操作する為に [`Keyword` モジュール](https://hexdocs.pm/elixir/Keyword.ht" +"ml) を提供しています。ただし、キーワードリストは単なるリストであり、それ自体はリストとして同じ線形的な運用特性があることは覚えておいてください。リストが" +"長いほどキーの検索や要素数のカウントに時間がかかります。その理由は、Elixir のキーワードリストが主にオプション値を渡す為に使われる為です。要素をたくさ" +"ん保持したり、一つのキーが一つの値とだけ関連づけられることの保証が必要な場合は、キーワードリストの代わりにマップを使うべきです。" msgid "## Maps" -msgstr "" +msgstr "## マップ" msgid "" "Whenever you need a key-value store, maps are the \"go to\" data structure in El" "ixir. A map is created using the `%{}` syntax:" -msgstr "" +msgstr "キーと値のペアで保持したいものがある時にはマップが打ってつけのデータ構造です。マップは `%{}` という構文を使って作成します。" msgid "" "```iex\n" @@ -196,18 +218,20 @@ msgid "" msgstr "" msgid "Compared to keyword lists, we can already see two differences:" -msgstr "" +msgstr "キーワードリストと比較すると二つの違いが見て取れます。" msgid "" " * Maps allow any value as a key.\n" " * Maps' keys do not follow any ordering." msgstr "" +" * マップはどんな値もキーにできる\n" +" * マップのキーは順序がない" msgid "" "In contrast to keyword lists, maps are very useful with pattern matching. When" " a map is used in a pattern, it will always match on a subset of the given val" "ue:" -msgstr "" +msgstr "キーワードリストと違ってマップのパターンマッチは非常に有用です。パターンにマップを使うと、与えられた値のサブセットとマッチします。" msgid "" "```iex\n" @@ -225,10 +249,10 @@ msgstr "" msgid "" "As shown above, a map matches as long as the keys in the pattern exist in the " "given map. Therefore, an empty map matches all maps." -msgstr "" +msgstr "見ての通り、パターン内のキーが与えられたマップ内に存在する間はマッチします。よって、空のマップは完全にどのマップとも一致します。" msgid "Variables can be used when accessing, matching and adding map keys:" -msgstr "" +msgstr "変数を使って値にアクセスしたり、マッチングやキーを追加することが出来ます。" msgid "" "```iex\n" @@ -247,6 +271,8 @@ msgid "" "[The `Map` module](https://hexdocs.pm/elixir/Map.html) provides a very similar" " API to the `Keyword` module with convenience functions to manipulate maps:" msgstr "" +"[`Map` モジュール](https://hexdocs.pm/elixir/Map.html) は `Keyword` モジュールが備えている便利な関数" +"とよく似た API をマップの操作の為に提供しています。" msgid "" "```iex\n" @@ -260,7 +286,7 @@ msgid "" msgstr "" msgid "Maps have the following syntax for updating a key's value:" -msgstr "" +msgstr "マップはキーが持つ値を更新する為に以下の構文をサポートします。" msgid "" "```iex\n" @@ -281,11 +307,13 @@ msgid "" " keys. For example, using it with the `:c` key failed because there is no `:c`" " in the map." msgstr "" +"上記の構文は与えられたキーが存在する必要があります。これを新しいキーの追加には使えません。`:c` というキーを使った例では、マップ内に `:c` が存在し" +"ないので失敗しています。" msgid "" "When all the keys in a map are atoms, you can use the keyword syntax for conve" "nience:" -msgstr "" +msgstr "マップ内のすべてのキーがアトムの時は便利なキーワード構文を使って簡潔に書けます。" msgid "" "```iex\n" @@ -297,7 +325,7 @@ msgstr "" msgid "" "Another interesting property of maps is that they provide their own syntax for" " accessing atom keys:" -msgstr "" +msgstr "マップのもう一つ興味深い特質として、アトムのキーにアクセスする独自の構文が用意されていることが挙げられます。" msgid "" "iex> map.a\n" @@ -315,6 +343,10 @@ msgid "" "s insight and examples on how you get more concise and faster software by writ" "ing assertive code in Elixir." msgstr "" +"一般的に Elixir を使う開発者は、マップを用いた操作で `Map` モジュールの関数を使うよりも、パターンマッチと `map.field` という構文" +"を好んで使います。その方が確定的なコードを書けるようになるからです。[このブログ記事](http://blog.plataformatec.com.br/2" +"014/09/writing-assertive-code-with-elixir/) では、Elixir の確定的なコードで如何に簡潔かつ高速なソフトウェ" +"アを手に入れるかの例と洞察を紹介しています。" msgid "" "> Note: Maps were recently introduced into the Erlang VM に導入されたばかりで、何百万" +"という沢山のキーを効率的に保持できるのは Elixir v1.2 以降だけです。もしも今、あなたが以前のバージョンの Elixir (v1.0 or v1." +"1) を使っていて、少なくとも数百のキーをサポートする必要があるなら、[`HashDict` モジュール](https://hexdocs.pm/elixi" +"r/HashDict.html) の使用を検討してもよいかも知れません。" msgid "## Nested data structures" -msgstr "" +msgstr "## ネストされたデータ構造" msgid "" "Often we will have maps inside maps, or even keywords lists inside maps, and s" @@ -335,9 +371,11 @@ msgid "" "s you would find in imperative languages while keeping the immutable propertie" "s of the language." msgstr "" +"マップの中でさらにマップやキーワードリスト等が必要なケースが往々にしてあります。Elixir は `put_in/2` や `update_in/2` 及び" +"、命令型言語に見られるものと同様に便利なその他のマクロよって、属性をイミュータブルに保ったまま多次元のデータ構造を操作するという利便性を提供しています。" msgid "Imagine you have the following structure:" -msgstr "" +msgstr "以下のような構造があるとします。" msgid "" "```iex\n" @@ -354,7 +392,7 @@ msgid "" "We have a keyword list of users where each value is a map containing the name," " age and a list of programming languages each user likes. If we wanted to acce" "ss the age for john, we could write:" -msgstr "" +msgstr "名前と年齢、そして各ユーザーが好きな言語リストで構成されるマップを含んだキーワードリストがあります。John の年齢にアクセスしたい時はこう書きます。" msgid "" "```iex\n" @@ -364,7 +402,7 @@ msgid "" msgstr "" msgid "It happens we can also use this same syntax for updating the value:" -msgstr "" +msgstr "これと同じ構文を値の更新に使うこともできます。" msgid "" "```iex\n" @@ -379,6 +417,8 @@ msgid "" "ols how the value changes. For example, let's remove \"Clojure\" from Mary's lis" "t of languages:" msgstr "" +"マクロ `update_in/2` もこれと似ていますが、値をどのように変更するかを制御する為に関数を渡すことができます。例えば、Mary の言語リストから" +" \"Clojure\" を削除してみましょう。" msgid "" "```iex\n" @@ -397,9 +437,15 @@ msgid "" "ocumentation in the `Kernel` module for more information](https://hexdocs.pm/e" "lixir/Kernel.html)." msgstr "" +"値を取り除いたり、データ構造を一度に更新するのことができる `get_and_update_in/2` も含めて `put_in/2` と `update_" +"in/2` をもっと知る必要があるでしょう。動的にデータ構造へアクセスできる `put_in/3` と `update_in/3` 、 `get_and_u" +"pdate_in/3` もあります。それぞれの詳しいドキュメントは [`Kernel` モジュール](https://hexdocs.pm/elixir/K" +"ernel.html) を参照してください。" msgid "" "This concludes our introduction to associative data structures in Elixir. You " "will find out that, given keyword lists and maps, you will always have the rig" "ht tool to tackle problems that require associative data structures in Elixir." msgstr "" +"ここで Elixir における連想データ構造の紹介を終わりとします。キーワードリストとマップがある時に、あなたはいつでも連想データ構造を必要とする問題に立ち" +"向かう為の適切なツールがあることが分かると思います。" diff --git a/_po/ja/getting-started/keywords-and-maps.pot b/_po/ja/getting-started/keywords-and-maps.pot index 86382ac4e..5ffda3f94 100644 --- a/_po/ja/getting-started/keywords-and-maps.pot +++ b/_po/ja/getting-started/keywords-and-maps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-06-19 23:39+0900\n" +"POT-Creation-Date: 2019-11-02 12:52+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/ja/getting-started/keywords-and-maps.markdown b/ja/getting-started/keywords-and-maps.markdown index 3cdc67f6a..261e31bd6 100644 --- a/ja/getting-started/keywords-and-maps.markdown +++ b/ja/getting-started/keywords-and-maps.markdown @@ -1,6 +1,6 @@ --- layout: getting-started -title: Keyword lists and maps +title: キーワードリストとマップ redirect_from: /getting-started/maps-and-dicts.html --- @@ -8,13 +8,13 @@ redirect_from: /getting-started/maps-and-dicts.html {% include toc.html %} -So far we haven't discussed any associative data structures, i.e. data structures that are able to associate a certain value (or multiple values) to a key. Different languages call these different names like dictionaries, hashes, associative arrays, etc. +今までのところ、とある値をキーと関連づけすることが出来るようなデータ構造についてまだ触れていません。言語によってはそういうデータ構造のことを辞書、ハッシュ、あるいは連想配列という風に異なる名前で呼んでいます。 -In Elixir, we have two main associative data structures: keyword lists and maps. It's time to learn more about them! +Elixir では主にキーワードリストとマップという二つの連想データ構造があります。これらについて学んでいきましょう。 -## Keyword lists +## キーワードリスト -In many functional programming languages, it is common to use a list of 2-item tuples as the representation of a key-value data structure. In Elixir, when we have a list of tuples and the first item of the tuple (i.e. the key) is an atom, we call it a keyword list: +大抵の関数型プログラミング言語は、キーと値を表現する為にタプルのリストを使うのが一般的です。Elixir では、タプルの最初にキーとしてアトムを使っているリストのことを、キーワードリストと呼んでいます。 ```iex iex> list = [{:a, 1}, {:b, 2}] @@ -23,7 +23,7 @@ iex> list == [a: 1, b: 2] true ``` -As you can see above, Elixir supports a special syntax for defining such lists: `[key: value]`. Underneath it maps to the same list of tuples as above. Since keyword lists are lists, we can use all operations available to lists. For example, we can use `++` to add new values to a keyword list: +上のコードで分かる通り、Elixir は同じことを `[key: value]` という風に書ける特別な構文をサポートしています。キーワードリストはリストですから、リストに対して行える全ての操作がキーワードリストにも利用できます。例えば、新しく値を追加する為に `++` を使うことができます。 ```iex iex> list ++ [c: 3] @@ -32,7 +32,7 @@ iex> [a: 0] ++ list [a: 0, a: 1, b: 2] ``` -Note that values added to the front are the ones fetched on lookup: +探索する際に引き出される値が先頭に追加された値であることに注意してください。 ```iex iex> new_list = [a: 0] ++ list @@ -41,13 +41,13 @@ iex> new_list[:a] 0 ``` -Keyword lists are important because they have three special characteristics: +キーワードリストは以下に挙げる 3 つに特徴づけられた重要なものです。 - * Keys must be atoms. - * Keys are ordered, as specified by the developer. - * Keys can be given more than once. + * キーはアトムである + * キーは開発者が指定した通りに並ぶ + * キーはいくつでも与えられる -For example, [the Ecto library](https://github.com/elixir-lang/ecto) makes use of these features to provide an elegant DSL for writing database queries: +例えば、[Ecto ライブラリ](https://github.com/elixir-lang/ecto) ではデータベースのクエリを書く為に使われる洗練された DSL を提供する為にそれら機能を利用しています。 ```elixir query = from w in Weather, @@ -56,30 +56,30 @@ query = from w in Weather, select: w ``` -These characteristics are what prompted keyword lists to be the default mechanism for passing options to functions in Elixir. In chapter 5, when we discussed the `if/2` macro, we mentioned the following syntax is supported: +Elixir で関数にオプションを渡す手法がキーワードリストとなっているのは、これらの特性によるきっかけです。5 章でマクロの `if/2` について触れた時に、以下のような構文がサポートされていることを言及しました。 ```iex iex> if false, do: :this, else: :that :that ``` -The `do:` and `else:` pairs are keyword lists! In fact, the call above is equivalent to: +`do:` と `else:` という二つのペアはキーワードリストなのです!実際に上記の呼び出しは以下と同等です。 ```iex iex> if(false, [do: :this, else: :that]) :that ``` -Which, as we have seen above, is the same as: +以下もまた上記と同じように、どちらも等しいものです。 ```iex iex> if(false, [{:do, :this}, {:else, :that}]) :that ``` -In general, when the keyword list is the last argument of a function, the square brackets are optional. +一般的にキーワードリストが関数の最後の引数である時は、角括弧を任意で省略できます。 -Although we can pattern match on keyword lists, it is rarely done in practice since pattern matching on lists requires the number of items and their order to match: +キーワードリストでパターンマッチを利用できるのですが、要素の数とその順序が一致している必要がある為に殆ど利用されません。 ```iex iex> [a: a] = [a: 1] @@ -92,11 +92,11 @@ iex> [b: b, a: a] = [a: 1, b: 2] ** (MatchError) no match of right hand side value: [a: 1, b: 2] ``` -In order to manipulate keyword lists, Elixir provides [the `Keyword` module](https://hexdocs.pm/elixir/Keyword.html). Remember, though, keyword lists are simply lists, and as such they provide the same linear performance characteristics as lists. The longer the list, the longer it will take to find a key, to count the number of items, and so on. For this reason, keyword lists are used in Elixir mainly for passing optional values. If you need to store many items or guarantee one-key associates with at maximum one-value, you should use maps instead. +Elixir はキーワードリストを操作する為に [`Keyword` モジュール](https://hexdocs.pm/elixir/Keyword.html) を提供しています。ただし、キーワードリストは単なるリストであり、それ自体はリストとして同じ線形的な運用特性があることは覚えておいてください。リストが長いほどキーの検索や要素数のカウントに時間がかかります。その理由は、Elixir のキーワードリストが主にオプション値を渡す為に使われる為です。要素をたくさん保持したり、一つのキーが一つの値とだけ関連づけられることの保証が必要な場合は、キーワードリストの代わりにマップを使うべきです。 -## Maps +## マップ -Whenever you need a key-value store, maps are the "go to" data structure in Elixir. A map is created using the `%{}` syntax: +キーと値のペアで保持したいものがある時にはマップが打ってつけのデータ構造です。マップは `%{}` という構文を使って作成します。 ```iex iex> map = %{:a => 1, 2 => :b} @@ -109,12 +109,12 @@ iex> map[:c] nil ``` -Compared to keyword lists, we can already see two differences: +キーワードリストと比較すると二つの違いが見て取れます。 - * Maps allow any value as a key. - * Maps' keys do not follow any ordering. + * マップはどんな値もキーにできる + * マップのキーは順序がない -In contrast to keyword lists, maps are very useful with pattern matching. When a map is used in a pattern, it will always match on a subset of the given value: +キーワードリストと違ってマップのパターンマッチは非常に有用です。パターンにマップを使うと、与えられた値のサブセットとマッチします。 ```iex iex> %{} = %{:a => 1, 2 => :b} @@ -127,9 +127,9 @@ iex> %{:c => c} = %{:a => 1, 2 => :b} ** (MatchError) no match of right hand side value: %{2 => :b, :a => 1} ``` -As shown above, a map matches as long as the keys in the pattern exist in the given map. Therefore, an empty map matches all maps. +見ての通り、パターン内のキーが与えられたマップ内に存在する間はマッチします。よって、空のマップは完全にどのマップとも一致します。 -Variables can be used when accessing, matching and adding map keys: +変数を使って値にアクセスしたり、マッチングやキーを追加することが出来ます。 ```iex iex> n = 1 @@ -142,7 +142,7 @@ iex> %{^n => :one} = %{1 => :one, 2 => :two, 3 => :three} %{1 => :one, 2 => :two, 3 => :three} ``` -[The `Map` module](https://hexdocs.pm/elixir/Map.html) provides a very similar API to the `Keyword` module with convenience functions to manipulate maps: +[`Map` モジュール](https://hexdocs.pm/elixir/Map.html) は `Keyword` モジュールが備えている便利な関数とよく似た API をマップの操作の為に提供しています。 ```iex iex> Map.get(%{:a => 1, 2 => :b}, :a) @@ -153,7 +153,7 @@ iex> Map.to_list(%{:a => 1, 2 => :b}) [{2, :b}, {:a, 1}] ``` -Maps have the following syntax for updating a key's value: +マップはキーが持つ値を更新する為に以下の構文をサポートします。 ```iex iex> map = %{:a => 1, 2 => :b} @@ -165,16 +165,16 @@ iex> %{map | :c => 3} ** (KeyError) key :c not found in: %{2 => :b, :a => 1} ``` -The syntax above requires the given key to exist. It cannot be used to add new keys. For example, using it with the `:c` key failed because there is no `:c` in the map. +上記の構文は与えられたキーが存在する必要があります。これを新しいキーの追加には使えません。`:c` というキーを使った例では、マップ内に `:c` が存在しないので失敗しています。 -When all the keys in a map are atoms, you can use the keyword syntax for convenience: +マップ内のすべてのキーがアトムの時は便利なキーワード構文を使って簡潔に書けます。 ```iex iex> map = %{a: 1, b: 2} %{a: 1, b: 2} ``` -Another interesting property of maps is that they provide their own syntax for accessing atom keys: +マップのもう一つ興味深い特質として、アトムのキーにアクセスする独自の構文が用意されていることが挙げられます。 ```iex iex> map = %{:a => 1, 2 => :b} @@ -186,15 +186,15 @@ iex> map.c ** (KeyError) key :c not found in: %{2 => :b, :a => 1} ``` -Elixir developers typically prefer to use the `map.field` syntax and pattern matching instead of the functions in the `Map` module when working with maps because they lead to an assertive style of programming. [This blog post](http://blog.plataformatec.com.br/2014/09/writing-assertive-code-with-elixir/) provides insight and examples on how you get more concise and faster software by writing assertive code in Elixir. +一般的に Elixir を使う開発者は、マップを用いた操作で `Map` モジュールの関数を使うよりも、パターンマッチと `map.field` という構文を好んで使います。その方が確定的なコードを書けるようになるからです。[このブログ記事](http://blog.plataformatec.com.br/2014/09/writing-assertive-code-with-elixir/) では、Elixir の確定的なコードで如何に簡潔かつ高速なソフトウェアを手に入れるかの例と洞察を紹介しています。 -> Note: Maps were recently introduced into the Erlang VM and only from Elixir v1.2 are they capable of holding millions of keys efficiently. Therefore, if you are working with previous Elixir versions (v1.0 or v1.1) and you need to support at least hundreds of keys, you may consider using [the `HashDict` module](https://hexdocs.pm/elixir/HashDict.html). +Note: マップは最近になって Erlang VM に導入されたばかりで、何百万という沢山のキーを効率的に保持できるのは Elixir v1.2 以降だけです。もしも今、あなたが以前のバージョンの Elixir (v1.0 or v1.1) を使っていて、少なくとも数百のキーをサポートする必要があるなら、[`HashDict` モジュール](https://hexdocs.pm/elixir/HashDict.html) の使用を検討してもよいかも知れません。 -## Nested data structures +## ネストされたデータ構造 -Often we will have maps inside maps, or even keywords lists inside maps, and so forth. Elixir provides conveniences for manipulating nested data structures via the `put_in/2`, `update_in/2` and other macros giving the same conveniences you would find in imperative languages while keeping the immutable properties of the language. +マップの中でさらにマップやキーワードリスト等が必要なケースが往々にしてあります。Elixir は `put_in/2` や `update_in/2` 及び、命令型言語に見られるものと同様に便利なその他のマクロよって、属性をイミュータブルに保ったまま多次元のデータ構造を操作するという利便性を提供しています。 -Imagine you have the following structure: +以下のような構造があるとします。 ```iex iex> users = [ @@ -205,14 +205,14 @@ iex> users = [ mary: %{age: 29, languages: ["Elixir", "F#", "Clojure"], name: "Mary"}] ``` -We have a keyword list of users where each value is a map containing the name, age and a list of programming languages each user likes. If we wanted to access the age for john, we could write: +名前と年齢、そして各ユーザーが好きな言語リストで構成されるマップを含んだキーワードリストがあります。John の年齢にアクセスしたい時はこう書きます。 ```iex iex> users[:john].age 27 ``` -It happens we can also use this same syntax for updating the value: +これと同じ構文を値の更新に使うこともできます。 ```iex iex> users = put_in users[:john].age, 31 @@ -220,7 +220,7 @@ iex> users = put_in users[:john].age, 31 mary: %{age: 29, languages: ["Elixir", "F#", "Clojure"], name: "Mary"}] ``` -The `update_in/2` macro is similar but allows us to pass a function that controls how the value changes. For example, let's remove "Clojure" from Mary's list of languages: +マクロ `update_in/2` もこれと似ていますが、値をどのように変更するかを制御する為に関数を渡すことができます。例えば、Mary の言語リストから "Clojure" を削除してみましょう。 ```iex iex> users = update_in users[:mary].languages, fn languages -> List.delete(languages, "Clojure") end @@ -228,6 +228,6 @@ iex> users = update_in users[:mary].languages, fn languages -> List.delete(langu mary: %{age: 29, languages: ["Elixir", "F#"], name: "Mary"}] ``` -There is more to learn about `put_in/2` and `update_in/2`, including the `get_and_update_in/2` that allows us to extract a value and update the data structure at once. There are also `put_in/3`, `update_in/3` and `get_and_update_in/3` which allow dynamic access into the data structure. [Check their respective documentation in the `Kernel` module for more information](https://hexdocs.pm/elixir/Kernel.html). +値を取り除いたり、データ構造を一度に更新するのことができる `get_and_update_in/2` も含めて `put_in/2` と `update_in/2` をもっと知る必要があるでしょう。動的にデータ構造へアクセスできる `put_in/3` と `update_in/3` 、 `get_and_update_in/3` もあります。それぞれの詳しいドキュメントは [`Kernel` モジュール](https://hexdocs.pm/elixir/Kernel.html) を参照してください。 -This concludes our introduction to associative data structures in Elixir. You will find out that, given keyword lists and maps, you will always have the right tool to tackle problems that require associative data structures in Elixir. +ここで Elixir における連想データ構造の紹介を終わりとします。キーワードリストとマップがある時に、あなたはいつでも連想データ構造を必要とする問題に立ち向かう為の適切なツールがあることが分かると思います。 From 2d6f9417a3ab6714fc1cf399e23e24cc05f54cfc Mon Sep 17 00:00:00 2001 From: tsubasa Date: Sun, 1 Dec 2019 03:08:31 +0900 Subject: [PATCH 2/3] Correct to proper translation Co-Authored-By: Rui Onodera --- _po/ja/getting-started/keywords-and-maps.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_po/ja/getting-started/keywords-and-maps.po b/_po/ja/getting-started/keywords-and-maps.po index f1b45b8fd..4db97f8cf 100644 --- a/_po/ja/getting-started/keywords-and-maps.po +++ b/_po/ja/getting-started/keywords-and-maps.po @@ -50,7 +50,7 @@ msgid "" "e have a list of tuples and the first item of the tuple (i.e. the key) is an a" "tom, we call it a keyword list:" msgstr "" -"大抵の関数型プログラミング言語は、キーと値を表現する為にタプルのリストを使うのが一般的です。Elixir では、タプルの最初にキーとしてアトムを使っているリ" +"大抵の関数型プログラミング言語は、キーと値を表現する為にタプルのリストを使うのが一般的です。Elixir では、タプルの最初の要素(キー)としてアトムを使っているタプルのリ" "ストのことを、キーワードリストと呼んでいます。" msgid "" From 68e473d20f982ffa352de9dd72957bb2f2b442bf Mon Sep 17 00:00:00 2001 From: tsubasa Date: Fri, 6 Dec 2019 06:07:43 +0900 Subject: [PATCH 3/3] Correct to natural expressions Co-Authored-By: Rui Onodera --- _po/ja/getting-started/keywords-and-maps.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_po/ja/getting-started/keywords-and-maps.po b/_po/ja/getting-started/keywords-and-maps.po index 4db97f8cf..8bd03ba56 100644 --- a/_po/ja/getting-started/keywords-and-maps.po +++ b/_po/ja/getting-started/keywords-and-maps.po @@ -102,7 +102,7 @@ msgid "" msgstr "" " * キーはアトムである\n" " * キーは開発者が指定した通りに並ぶ\n" -" * キーはいくつでも与えられる" +" * キーは何度でも使える" msgid "" "For example, [the Ecto library](https://github.com/elixir-lang/ecto) makes use"