Skip to content

Commit 0ec5659

Browse files
authored
Merge pull request #488 from stzn/fix-some-issues
Fix some issues
2 parents 4a71827 + 34604f4 commit 0ec5659

15 files changed

+83
-46
lines changed

Style.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 本の構造
22

3-
最終更新日: 2023/9/1
3+
最終更新日: 2023/10/28
44
原文: https://github.com/apple/swift-book/blob/main/Style.md
55

66
TSPL は 3 つの主なパートに加えて、補完的な機能を提供するいくつかの序文に分かれています。
@@ -9,11 +9,11 @@ TSPL は 3 つの主なパートに加えて、補完的な機能を提供する
99

1010
ツアーの意図は、一度に全体を読むことができることです。初心者は、Swift でできることの概要を理解できます。プログラミングの経験が豊富な読者は、「Swift が危険である」と知ることができます。つまり、最初のプロジェクトで混乱し始めるのに十分な Swift の言語構文を使用し、他の言語から既に知っている概念について、表面レベルの Swift の言語構文以上の内容について学ぶ準備ができたら、TSPL に戻ってきます。
1111

12-
**言語ガイド**(一般的に「ガイド」と呼ばれる)は、学習するのに役立つ順序で Swift 言語について案内します。ただし、言語または標準ライブラリのすべての機能を紹介することを約束するものではなく、いくつかのより複雑な基礎となる内容について、正確な詳細を端折って説明します。このガイドは、リファレンス(後述)に基づいて、核心を突いた詳細な疑問を解決し、言語を徹底的にカバーしています。リファレンスとは異なり、言語機能の実際の例を示しながら、順を追って説明します。事前の知識はほとんど必要ありません。
12+
**言語ガイド**(一般的に「ガイド」と呼ばれる)は、学習するのに役立つ順序で Swift 言語について案内します。ただし、言語または Swift 標準ライブラリのすべての機能を紹介することを約束するものではなく、いくつかのより複雑な基礎となる内容について、正確な詳細を端折って説明します。このガイドは、リファレンス(後述)に基づいて、核心を突いた詳細な疑問を解決し、言語を徹底的にカバーしています。リファレンスとは異なり、言語機能の実際の例を示しながら、順を追って説明します。事前の知識はほとんど必要ありません。
1313

1414
ガイドに新しいセクションを追加するときに、上から順番に読むことができるという決まりを維持するためには、説明で使用するすべての構文と概念が事前の章で既に説明されていることを確認してください。「基本」の章は、主に、ガイド内の最初の方の章で必要な一連の構文と概念を紹介するために存在します。「基本」の多くのトピックは、ガイドの後半でさらに詳しく説明されています。
1515

16-
このガイドには、2 つの理由から標準ライブラリの型が含まれています。それは、言語の概念を説明するために必要であるということと、あまりにも一般的であるため、読者がそれらなしでは役に立つものを構築できないということです。後者の理由には、個人的意見が含まれます。標準ライブラリに新しい型が導入されると、通常、それらを TSPL に追加するかどうか、どこに追加するかについて話し合う必要があります。
16+
このガイドには、2 つの理由から Swift 標準ライブラリの型が含まれています。それは、言語の概念を説明するために必要であるということと、あまりにも一般的であるため、読者がそれらなしでは役に立つものを構築できないということです。後者の理由には、個人的意見が含まれます。Swift 標準ライブラリに新しい型が導入されると、通常、それらを TSPL に追加するかどうか、どこに追加するかについて話し合う必要があります。
1717

1818
このガイドは、基本的なトピック、データモデリングのトピック、高度なトピックの 3 つの主要なまとまりに分けることができます。基本的なトピックの範囲は、列挙型、構造体、クラスの前のすべてのトピックです。高度なトピックの範囲は、デイニシャライゼーションの後のすべてのトピックです。データモデリングはその中間の内容です。これらの主要なまとまり間でしばらく読むのをやめてしまったとしても、上から順番に読めば、そのまとまりの意味がわかるように意図して作成されています。例えば、基本的なトピックを読むだけでも、構造化されていない「プリミティブ」なデータのみを持つプログラムを作成するのに十分な情報が得られます。各まとまり内は、最初に基本的なトピックが配置され、ほとんどの読者がスキップできるトピックが最後に配置されています。
1919

@@ -80,7 +80,7 @@ nono-ptional と誤読を避けるためにハイフンでつなげます。Appl
8080

8181
初めて名前付き演算子を導入するときは、その名前の後にその記号を付けます。以降の使用では、シンボルを単独で使用してください。例えば:
8282

83-
> デフォルトでは、独自のクラスと構造体には、等号演算子(`==`)または不等号演算子(`!=`)の実装がありません。通常は `==` 演算子を実装し、`==` 演算子の結果を否定する `!=` 演算子は標準ライブラリのデフォルト実装を使用します`==` 演算子を実装するには 2 つの方法があります。
83+
> デフォルトでは、独自のクラスと構造体には、等号演算子(`==`)または不等号演算子(`!=`)の実装がありません。通常は `==` 演算子を実装し、`==` 演算子の結果を否定する `!=` 演算子はSwift 標準ライブラリのデフォルト実装を使用します`==` 演算子を実装するには 2 つの方法があります。
8484
8585
オペレーターに確立された英語の名前がない場合は、発明した名前についてテックレビューを受けるようにしてください。
8686

@@ -112,6 +112,12 @@ Apple スタイルガイドでは、コードの実行時点(run time)とコー
112112

113113
アクターを説明するときはこの単語を避けてください。設計上、アクターは可変状態を共有することを具体的に避けています。可変状態は非公開であり、アクターの(async)メソッドを介してのみアクセスできます。
114114

115+
## 標準ライブラリ(standard library)
116+
117+
最初の使用では、「Swift 標準ライブラリ」と完全に明記してください。
118+
文脈上がすでに明確で完全な名前を繰り返すのがくどい場合、「標準ライブラリ」と短縮できます。
119+
(現在、そういった例はありません)。
120+
115121
## 生成(spawn), 開始(start)
116122

117123
API のシンボル名と一致するように、代わりに「追加(add)」で新しい Task の作成について言及してください。(生成や開始という名前は、以前のバージョンのプロポーザルで使用されていました)
2.44 KB
Loading

language-guide/advanced-operators.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 高度な演算子\(Advanced Operators\)
22

3-
最終更新日: 2022/12/3
3+
最終更新日: 2023/10/28
44
原文: https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html
55

66
カスタム演算子を定義する。ビット操作を行う。ビルダ構文を使う。
@@ -367,7 +367,7 @@ original += vectorToAdd
367367
368368
### <a id="equivalence-operators">等価演算子\(Equivalence Operators\)</a>
369369

370-
デフォルトでは、独自のクラスと構造体には、等価演算子\(`==`\)および不等価演算子\(`!=`\)として知られる等価演算子の実装がありません。通常は `==` 演算子を実装し、標準ライブラリの `==` 演算子の結果を否定する `!=` 演算子のデフォルト実装を使用します。`==` 演算子を実装するには 2 つの方法があります。自分で実装するか、多くの型の場合、Swift に実装を合成するよう依頼することができます。どちらの場合も、標準ライブラリの `Equatable` プロトコルに準拠を追加します。
370+
デフォルトでは、独自のクラスと構造体には、等価演算子\(`==`\)および不等価演算子\(`!=`\)として知られる等価演算子の実装がありません。通常は `==` 演算子を実装し、Swift 標準ライブラリの `==` 演算子の結果を否定する `!=` 演算子のデフォルト実装を使用します。`==` 演算子を実装するには 2 つの方法があります。自分で実装するか、多くの型の場合、Swift に実装を合成するよう依頼することができます。どちらの場合も、Swift 標準ライブラリの `Equatable` プロトコルに準拠を追加します。
371371

372372
`==` 演算子の実装は、他の中置演算子を実装するのと同じ方法で提供します:
373373

language-guide/control-flow.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 制御フロー\(Control Flow\)
22

3-
最終更新日: 2023/5/27
3+
最終更新日: 2023/10/28
44
原文: https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html
55

66
分岐、ループ、および早期終了を使ってコードを構造化する。
@@ -394,13 +394,13 @@ default:
394394
let someCharacter: Character = "z"
395395
switch someCharacter {
396396
case "a":
397-
print("アルファベットの最初の文字")
397+
print("ラテンアルファベットの最初の文字")
398398
case "z":
399-
print("アルファベットの最後の文字")
399+
print("ラテンアルファベットの最後の文字")
400400
default:
401401
print("その他の文字")
402402
}
403-
// アルファベットの最後の文字
403+
// ラテンアルファベットの最後の文字
404404
```
405405

406406
`switch` 文の最初のケースは、英語アルファベットの最初の文字 `a` に合致し、2 番目のケースは最後の文字 `z` に合致します。全ての可能性がある文字をカバーしなければならないため、`a``z` 以外の全ての文字に対して `default` ケースを使用しています。こうすることで全てのケースを網羅できています。
@@ -411,15 +411,15 @@ default:
411411
let anotherCharacter: Character = "a"
412412
let message = switch anotherCharacter {
413413
case "a":
414-
"アルファベットの最初の文字"
414+
"ラテンアルファベットの最初の文字"
415415
case "z":
416-
"アルファベットの最後の文字"
416+
"ラテンアルファベットの最後の文字"
417417
default:
418418
"その他の文字"
419419
}
420420

421421
print(message)
422-
// "アルファベットの最初の文字"
422+
// "ラテンアルファベットの最初の文字"
423423
```
424424

425425
この例では、`switch` 式の各ケースには、そのケースが `anotherCharacter` にマッチしたときに使用される `message` の値が含まれています。`switch` は常に網羅的であるため、代入する値は必ず存在します。

language-guide/error-handling.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,5 +276,5 @@ func processFile(filename: String) throws {
276276

277277
上記の例では、`defer` 文を使用して、`open(_:)` 関数に対応する `close(_:)` への呼び出しが確実に実行されること保証しています。
278278

279-
> NOTE
280-
> エラー処理コードが含まれていない場合でも、`defer` 文を使用できます。
279+
エラー処理コードが含まれていない場合でも、`defer` 文を使用できます。
280+
より詳細は[遅延アクション\(Deferred Actions\)](./control-flow.md#遅延アクションdeferred-actions)

language-guide/generics.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ジェネリクス\(Generics\)
22

3-
最終更新日: 2023/9/17
3+
最終更新日: 2023/10/28
44
原文: https://docs.swift.org/swift-book/LanguageGuide/Generics.html
55

66
複数の型で機能するコードを記述し、それらの型で準拠が必要な要件を指定する。
@@ -693,7 +693,7 @@ extension Container where Item: Equatable {
693693

694694
## <a id="associated-types-with-a-generic-where-clause">ジェネリック where 句を使用した関連型\(Associated Types with a Generic Where Clause\)</a>
695695

696-
関連型にジェネリック `where` 句を含めることができます。例えば、標準ライブラリの `Sequence` プロトコルで使用するようなイテレータを含む `Container` のバージョンを作成するとします。書き方は次のとおりです:
696+
関連型にジェネリック `where` 句を含めることができます。例えば、Swift 標準ライブラリの `Sequence` プロトコルで使用するようなイテレータを含む `Container` のバージョンを作成するとします。書き方は次のとおりです:
697697

698698
```swift
699699
protocol Container {
@@ -734,7 +734,7 @@ extension Container {
734734

735735
`Container` プロトコルへのこの extension は、インデックスのシーケンスを受け取り、指定された各インデックスのアイテムを含む配列を返すサブスクリプトを追加します。このジェネリックなサブスクリプトは、次のように制約されます:
736736

737-
* 山括弧\(`<>`\)内のジェネリックパラメータのインデックスは、標準ライブラリの `Sequence` プロトコルに準拠した型にする必要があります
737+
* 山括弧\(`<>`\)内のジェネリックパラメータのインデックスは、Swift 標準ライブラリの `Sequence` プロトコルに準拠した型にする必要があります
738738
* サブスクリプトは、単一の `Indices` 型のインスタンスのパラメータ `indices` を受け取ります
739739
* ジェネリック `where` 句では、シーケンスのイテレータが `Int` 型の要素を繰り返し処理することを要求します。これにより、シーケンス内のインデックスは、コンテナに使用されるインデックスと同じ型だということが保証されます
740740

language-guide/macros.md

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# マクロ\(Macros\)
22

3-
最終更新日: 2023/6/3
3+
最終更新日: 2023/10/28
44
原文: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros
55

66
繰り返しコードを生成するために、コンパイル時にコードを変換します。
@@ -233,7 +233,7 @@ dependencies: [
233233

234234
上記のコードの `some-tag` プレースホルダを、使用したい `SwiftSyntax` のバージョンの Git タグで置き換えてください。
235235

236-
マクロの役割に応じて、マクロの実装が準拠するべき `SwiftSystem` にある対応するプロトコルがあります。例えば、前のセクションの `#fourCharacterCode` を考えてみましょう。そのマクロを実装した構造体がこちらです:
236+
マクロの役割に応じて、マクロの実装が準拠するべき `SwiftSyntax` にある対応するプロトコルがあります。例えば、前のセクションの `#fourCharacterCode` を考えてみましょう。そのマクロを実装した構造体がこちらです:
237237

238238
```swift
239239
public struct FourCharacterCode: ExpressionMacro {
@@ -272,11 +272,22 @@ private func fourCharacterCode(for characters: String) -> UInt32? {
272272
enum CustomError: Error { case message(String) }
273273
```
274274

275-
`#fourCharacterCode` マクロは、式を生成する自立式マクロなので、これを実装した `FourCharacterCode` 型は、 `ExpressionMacro` プロトコルに準拠します。`ExpressionMacro` プロトコルの要件は 1 つで、AST を展開する `expansion(of:in:)` メソッドです。マクロの役割とそれに対応する `SwiftSystem` プロトコルのリストについては、[属性\(Attributes\)](../language-reference/attributes.md)[属性\(Attributes\)のattached](../language-reference/attributes.md#attached)[属性\(Attributes\)のfreestanding](../language-reference/attributes.md#freestanding) を参照してください。
275+
このマクロを既存の Swift Package Manager プロジェクトに追加する場合、マクロターゲットのエントリポイントとして動作し、ターゲットが定義するマクロを一覧にする型を追加します:
276+
277+
```swift
278+
import SwiftCompilerPlugin
279+
280+
@main
281+
struct MyProjectMacros: CompilerPlugin {
282+
var providingMacros: [Macro.Type] = [FourCharacterCode.self]
283+
}
284+
```
285+
286+
`#fourCharacterCode` マクロは、式を生成する自立式マクロなので、これを実装した `FourCharacterCode` 型は、 `ExpressionMacro` プロトコルに準拠します。`ExpressionMacro` プロトコルの要件は 1 つで、AST を展開する `expansion(of:in:)` メソッドです。マクロの役割とそれに対応する `SwiftSyntax` プロトコルのリストについては、[属性\(Attributes\)](../language-reference/attributes.md)[属性\(Attributes\)のattached](../language-reference/attributes.md#attached)[属性\(Attributes\)のfreestanding](../language-reference/attributes.md#freestanding) を参照してください。
276287

277288
`#fourCharacterCode` マクロを展開するために、Swift はこのマクロを使用するコードの AST を、マクロの実装を含むライブラリに送信します。ライブラリの中で、Swift はメソッドの引数として AST とコンテキストを渡して `FourCharacterCode.expansion(of:in:)` を呼び出します。`expansion(of:in:)` の実装は、`#fourCharacterCode` に引数として渡された文字列を見つけ、対応する整数リテラルの値を計算します。
278289

279-
上記の例では、最初の `guard` ブロックが AST から文字列リテラルを取り出し、その AST 要素を `literalSegment` に代入しています。2 番目の `guard` ブロックは、private な `FourCharacterCode(for:)` 関数を呼び出します。これらのブロックはいずれも、マクロの使い方が間違っているとエラーを発生させます(エラーメッセージは、不正な呼び出し先でのコンパイラエラーになります)。例えば、マクロを `#fourCharacterCode("AB" + "CD")` として呼び出そうとすると、コンパイラは「静的な文字列が必要です(Need a static string)」というエラーを表示します。
290+
上記の例では、最初の `guard` ブロックが AST から文字列リテラルを取り出し、その AST 要素を `literalSegment` に代入しています。2 番目の `guard` ブロックは、private な `fourCharacterCode(for:)` 関数を呼び出します。これらのブロックはいずれも、マクロの使い方が間違っているとエラーを発生させます(エラーメッセージは、不正な呼び出し先でのコンパイラエラーになります)。例えば、マクロを `#fourCharacterCode("AB" + "CD")` として呼び出そうとすると、コンパイラは「静的な文字列が必要です(Need a static string)」というエラーを表示します。
280291

281292
`expansion(of:in:)` メソッドは、AST で式を表す `SwiftSyntax` からの型である `ExprSyntax` のインスタンスを返します。この型は、`StringLiteralConvertible` プロトコルに準拠しているので、マクロの実装は、その結果を作成するために、軽量な構文として文字列リテラルを使用します。マクロの実装から返す `SwiftSyntax` の型はすべて、 `StringLiteralConvertible` に準拠しているので、あらゆる種類のマクロを実装するときにこのアプローチを使用することができます。
282293

@@ -298,7 +309,7 @@ let file = BasicMacroExpansionContext.KnownSourceFile(
298309
let context = BasicMacroExpansionContext(sourceFiles: [source: file])
299310

300311
let transformedSF = source.expand(
301-
macros:["fourCharacterCode": FourCC.self],
312+
macros:["fourCharacterCode": FourCharacterCode.self],
302313
in: context
303314
)
304315

0 commit comments

Comments
 (0)