Skip to content

Latest commit

 

History

History
307 lines (183 loc) · 25.9 KB

File metadata and controls

307 lines (183 loc) · 25.9 KB

本の構造

最終曎新日: 2024/2/25 原文: https://github.com/apple/swift-book/blob/main/Style.md

TSPL は 3 ぀の䞻なパヌトに加えお、補完的な機胜を提䟛するいく぀かの序文に分かれおいたす。

Swift ツアヌ(䞀般的に「ツアヌ」ず呌ばれる)では、興味深い Swift コヌドがたくさん衚瀺されたすが、蚀語がどのように機胜するかに぀いおはほずんど䜕も觊れおいたせん。䟋えば、ガむド(埌述)にはオプショナルチェヌンに関する章がありたすが、ツアヌでは数文に芁玄されおいたす。ツアヌ内では、構文ずその䜿甚方法を理解するだけで十分です。オプショナルチェヌンがどのように機胜し、い぀䜿甚する必芁があるのかに぀いおの実際の詳现な説明は、ガむドに任せおいたす。

ツアヌの意図は、䞀床に党䜓を読むこずができるこずです。初心者は、Swift でできるこずの抂芁を理解できたす。プログラミングの経隓が豊富な読者は、「Swift が危険である」ず知るこずができたす。぀たり、最初のプロゞェクトで混乱し始めるのに十分な Swift の蚀語構文を䜿甚し、他の蚀語から既に知っおいる抂念に぀いお、衚面レベルの Swift の蚀語構文以䞊の内容に぀いお孊ぶ準備ができたら、TSPL に戻っおきたす。

蚀語ガむド(䞀般的に「ガむド」ず呌ばれる)は、孊習するのに圹立぀順序で Swift 蚀語に぀いお案内したす。ただし、蚀語たたは Swift 暙準ラむブラリのすべおの機胜を玹介するこずを玄束するものではなく、いく぀かのより耇雑な基瀎ずなる内容に぀いお、正確な詳现を端折っお説明したす。このガむドは、リファレンス(埌述)に基づいお、栞心を突いた詳现な疑問を解決し、蚀語を培底的にカバヌしおいたす。リファレンスずは異なり、蚀語機胜の実際の䟋を瀺しながら、順を远っお説明したす。事前の知識はほずんど必芁ありたせん。

ガむドに新しいセクションを远加するずきに、䞊から順番に読むこずができるずいう決たりを維持するためには、説明で䜿甚するすべおの構文ず抂念が事前の章で既に説明されおいるこずを確認しおください。「基本」の章は、䞻に、ガむド内の最初の方の章で必芁な䞀連の構文ず抂念を玹介するために存圚したす。「基本」の倚くのトピックは、ガむドの埌半でさらに詳しく説明されおいたす。

このガむドには、2 ぀の理由から Swift 暙準ラむブラリの型が含たれおいたす。それは、蚀語の抂念を説明するために必芁であるずいうこずず、あたりにも䞀般的であるため、読者がそれらなしでは圹に立぀ものを構築できないずいうこずです。埌者の理由には、個人的意芋が含たれたす。Swift 暙準ラむブラリに新しい型が導入されるず、通垞、それらを TSPL に远加するかどうか、どこに远加するかに぀いお話し合う必芁がありたす。

このガむドは、基本的なトピック、デヌタモデリングのトピック、高床なトピックの 3 ぀の䞻芁なたずたりに分けるこずができたす。基本的なトピックの範囲は、列挙型、構造䜓、クラスの前のすべおのトピックです。高床なトピックの範囲は、デむニシャラむれヌションの埌のすべおのトピックです。デヌタモデリングはその䞭間の内容です。これらの䞻芁なたずたり間でしばらく読むのをやめおしたったずしおも、䞊から順番に読めば、そのたずたりの意味がわかるように意図しお䜜成されおいたす。䟋えば、基本的なトピックを読むだけでも、構造化されおいない「プリミティブ」なデヌタのみを持぀プログラムを䜜成するのに十分な情報が埗られたす。各たずたり内は、最初に基本的なトピックが配眮され、ほずんどの読者がスキップできるトピックが最埌に配眮されおいたす。

蚀語リファレンス(䞀般的に「リファレンス」ず呌ばれる)は、Swift 蚀語のすべおの偎面を完党に詳现に説明しおいたすが、教科曞になるこずを意図したものではありたせん。これは、圢匏文法の圢に埓っお䞊べられおおり、䟋ず応甚を端折っおいたす。いく぀かの堎所では、䟋を瀺したガむドぞのリンクを明瀺しおいたす。リファレンスは、初心者に芪しみやすいものである必芁はありたせんが(これはガむドが察応しおいたす)、蚀語の䞭でもめったに深掘りされない領域にも焊点を圓おお、正確か぀明確である必芁がありたす。そのためには、取っ぀きやすさや芪しみやすさを犠牲にしなければならない堎合がありたす。倚くの読者はこういった領域のリファレンスすら必芁ずしないので倧䞈倫ですが、リファレンスが䞍明確だず、答えが必芁な読者は他に行く圓おがなくなっおしたうからです。

リファレンス内は、セクションの内容が掚枬できるような 4 郚構成になっおいたす。

  • 芋出しの蚀語構造を 2、3 文で簡単に説明したす
  • コヌドの抂芁はその䞀般的な構文の圢を瀺しおいたす
  • 2、3 段萜でより詳现を説明したす
  • 文法は構文を圢匏的に蚘述したす

圢匏文法の目的は、リファレンスのシンプルな文では完党に答えられなかった問いに察しお、(意味に぀いおコメントするこずなく) Swift ずしお劥圓な圢匏は䜕かずいう問いに明確に答えられるようにするこずです。これは䞻に人間の読者を察象ずしおいるため、Swift コヌドのパヌサヌを生成するのに垞に適しおいるずは限りたせん。

甚語ずルヌル

属性名

ガむドでは、属性名の前に @ を曞きたす。 リファレンスでは、省略したす。

back deploy

2 ぀の単語で぀づり、1 単語にしたり、ハむフンを付けたせん。

deprecation

蚀語リファレンスの非掚奚の機胜を説明するセクションの冒頭に、非掚奚の泚釈を远加しおください。以䞋のような衚珟ずマヌクアップを䜿甚しおください:

> 非掚奚:  
> この属性は非掚奚です。  
> [main](./language-reference/attributes.md#main)を代わりに䜿甚しおください。  
> Swift6では、この属性を䜿甚するず゚ラヌになりたす。

definite initialization

"definitive initialization"ではありたせん。 DI ずいう略称を䜿っおはいけたせん。

コンパむラ

䞋蚘の Swift の項目を芋おください。

関数

リファレンスでは、「関数」にフリヌ関数ずメンバヌ関数の䞡方が含たれるため、メ゜ッドに぀いおも個別に蚀及したせん。ガむドでは、「関数ずメ゜ッド」ず曞いおいたす。

芋出し

芋出しにはアンダヌラむンではなく番号蚘号(#)を䜿甚したす。

4 階局の芋出しは蚱可されおおり、本でも䜿甚されおいたすが、通垞は避けるようにしおください。深くネストした芋出しは、倚くの堎合、コンテンツを敎理するためのより良い方法があるこずを瀺しおいたす。

memberwise initializer

"member-wise"のようにハむフンを぀けないでください。

マクロ名

ガむドでは付属マクロ(attached macros)を指す堎合は名前の前に @ を、自立匏マクロ(freestanding macros)を指す堎合は名前の前に # を蚘述したす。 リファレンスでは、省略したす。

メ゜ッド

「関数」の項目を芋おください。

non-optional

nono-ptional ず誀読を避けるためにハむフンで぀なげたす。Apple スタむルガむドのハむフンの通垞のルヌルでは、ハむフンは省略されたす。

コミット(51c4fbc135a5e82343a0f5d9121f8a060b59f1a3) および rdar://problem/44881846 も参照しおください。

非同期ではない

二重吊定の代わりに「同期」を䜿甚しおください。

オペレヌタヌ

初めお名前付き挔算子を導入するずきは、その名前の埌にその蚘号を付けたす。以降の䜿甚では、シンボルを単独で䜿甚しおください。䟋えば:

デフォルトでは、独自のクラスず構造䜓には、等号挔算子(==)たたは䞍等号挔算子(!=)の実装がありたせん。通垞は == 挔算子を実装し、== 挔算子の結果を吊定する != 挔算子はSwift 暙準ラむブラリのデフォルト実装を䜿甚したす。== 挔算子を実装するには 2 ぀の方法がありたす。

オペレヌタヌに確立された英語の名前がない堎合は、発明した名前に぀いおテックレビュヌを受けるようにしおください。

オプショナルバむンディング

冠詞を省略しおください。"use an optional binding"ではなく、"use optional binding"を䜿甚しおください。

受動態

䞀般的に、胜動態はより読みやすい傟向があるため、胜動態で文を曞くこずができるずきに受動態を避ける、ずいう曞き方のガむダンスは匕き続き適甚されたす。ただし、TSPL の䞻題によっおは、あいたいなコンパむラや Swift やパヌサによっお実行されるため、胜動態にしおも意味のある䞻題がない堎合もありたす。その堎合、動䜜䞻ではなくアクションに焊点を圓おた文を曞くには、受動態がより明確です。

䟋えば、「X は Y ずしお理解される」ずいうフレヌズは、構文の意味を説明する際にリファレンスに䜕床か登堎したす。この堎合、理解を実行する明確な動䜜䞻が存圚せず、その動䜜䞻がわからないであるため、受動態は胜動態よりも明確です。

朜圚的な䞭断点(potential suspension point)

これは、await のセマンティクスを説明する際に掚奚される衚珟です。文脈䞊指しおいるものがすでに明確であり、繰り返しの「朜圚的な」が冗長になる堎合は、単に「䞭断点」に短瞮できたす。

コヌドリストの前の句読点

コヌドリストが基本的に文の䞀郚のように機胜し、リストでは通垞の文がそれを明瀺的に参照しおいる堎合、「次のように」たたは「以䞋に瀺すように」のようなフレヌズで終わる文の埌にコロンを曞きたす。「䟋えば:」のように文の断片の埌にコロンを䜿甚したす。コヌドに぀いお述べおいる文の埌にはピリオドを曞きたすが、コヌドを参照する単語は含めたせん。「次のコヌドでは」のような語句で始たる文には読点を䜿甚したす。

泚意: この甚法は既存のテキストず完党に䞀臎しおいるわけではありたせん。これに぀いおコミッティグルヌプず話し合う必芁がありたす。

runtime, run time

Apple スタむルガむドでは、コヌドの実行時点(run time)ずコヌドの実行環境(runtime)の䞡方に「runtime」を䜿甚したす。これたでのずころ、Obj-C の実行環境がドキュメント化されおいるように Swift の実行環境はドキュメント化されおいないため、この区別を行う必芁はありたせんでした。(Swift の実行環境は、Obj-C の実行環境のように API を公開しおいないため、私たちは、䞀郚ドキュメント化しおいたせん) 䞀般的に、甚語の䜿甚方法が異なるため、䟋倖を陀いお文脈から違いは明らかです。「run-time error」や「runtime error」などのフレヌズは、コヌドの実行䞭に発生する゚ラヌず、Swift の実行環境に起因たたは関連する゚ラヌをそれぞれ指したす。

共有可倉状態

アクタヌを説明するずきはこの単語を避けおください。蚭蚈䞊、アクタヌは可倉状態を共有するこずを具䜓的に避けおいたす。可倉状態は非公開であり、アクタヌの(async)メ゜ッドを介しおのみアクセスできたす。

暙準ラむブラリ(standard library)

最初の䜿甚では、「Swift 暙準ラむブラリ」ず完党に明蚘しおください。 文脈䞊がすでに明確で完党な名前を繰り返すのがくどい堎合、「暙準ラむブラリ」ず短瞮できたす。 (珟圚、そういった䟋はありたせん)。

生成(spawn), 開始(start)

API のシンボル名ず䞀臎するように、代わりに「远加(add)」で新しい Task の䜜成に぀いお蚀及しおください。(生成や開始ずいう名前は、以前のバヌゞョンのプロポヌザルで䜿甚されおいたした)

䞭断点(suspension point)

朜圚的な䞭断点の項目を芋おください。

構文のアりトラむン

統語構造(コヌドがどのような構造をしおいるのか)の圢状を瀺す堎合にのみ䜿甚しおください。構文のアりトラむンの埌に続く本文のプレヌスホルダ(いわゆる、青いバブル)を参照する堎合は、その名前をむタリック䜓にしたす。

構文ののアりトラむンは、ガむドでは控えめに䜿甚されおいたすが、リファレンスでは広範囲に䜿甚されおいたす。

Swift

このガむドでは、コンパむラたたは蚀語が行っおいるこずを説明するずきに、Swift を「芪しみやすい」䞻題ずしお䜿甚しおいたす。䟋えば:

Swift は、珟圚のむンスタンスのプロパティたたはメ゜ッドを参照しおいるず想定したす。

Swift は someString 定数を String 型ず掚枬するこずに泚意しおください。

Any 型の倀が期埅される堎合にオプショナル倀を䜿甚するず、Swift は譊告を衚瀺したす。

リファレンスでは、コンパむラがアクションを実行する実際の動䜜䞻である堎合に具䜓的に蚀及しおいたす。私たちはパヌサ(parser)、レキサ(lexer)、オプティマむザ(optimizer)などのコンパむラの詳现を区別したせん。

トヌン

䞀般的に、そしお特にガむドは、楜しさが䌝わるように曞くべきです。本曞内の䟋は簡単で、読みやすいものでなければなりたせん。぀たり、珟実的なコヌドが奜たれ、倚くの章で耇数の䟋に共通の物語が織り蟌たれおいたす。その連続した物語の぀ながりは、埌々の倉曎をより倧倉にする可胜性がありたすが、章の流れが良くなり、党䜓ずしおよりよくたずたるため、総じお十分にそうする䟡倀はあるず思いたす。

読みやすさず芪しみやすさのために、たずえリファレンスであっおも、構文を説明しおいるだけであっおも、1 文字たたは無意味な識別子を持぀䟋は蚘述したせん。関連がない堎合は、代わりに SomeStructure などの型や someArray などの倉数を䜿甚したす。

私たちの䟋の䞭には、ガむドツアヌのホタルの乗組員に぀いおのゞョヌクなど、本の倖のものぞのナヌモラスな蚀及が含​​たれおいたす。いく぀かには、それらを解説しおいる REFERENCE コメントが付いおいたす。そういった蚀及の意味がわからなかったずしおも、䜕事もないように党郚無芖できたす。たた、蚀及があるこずに気づいたけれどもゞョヌクを理解できなかった堎合は、オンラむンで簡単に怜玢できるはずです。

ガむド内のコヌドリストは、通垞、3 郚構成の法則に埓いたす。コヌドリストの前の段萜では、解決しようずしおいる問題を組み立お、次にコヌドが䜕をするかを非垞に高いレベルで説明しおいたす。コヌドの埌のパラグラフ(堎合によっおは耇数のパラグラフ)では、コヌドリストが䜕を行ったかを詳しく説明したす。この意図は、本質的に段階的な開瀺を提䟛するこずです。䞊玚の読者はコヌドリストの埌の段萜をスキップでき、その前のテキストの䞀郚でさえもスキップできるかもしれたせんが、必芁な読者には、コヌドは完党に前提知識なしでも理解できるように説明を提䟛しおいたす。

ツアヌ、ガむド、リファレンスのバランスに぀いおは、このリポゞトリのトップの階局にある README ファむルを参照しおください。

意味のある改行(Semantic Line Breaks)

このリポゞトリのマヌクダりンファむルでは、文や句の区切りずなる行末に改行を䜿甚したす。こうするこずで、プルリク゚スト、コミット通知メヌル、およびタヌミナルなどの堎所で衚瀺されたずきに、差分が読みやすくなるよう行を十分に短く保぀こずができたす。行は意味のある堎所で改行されるため、段萜党䜓を再改行するような倉曎は必芁はなく、倉曎された行のみがマヌクされるようになりたす。これにより、git-blame などのツヌルで行ごずの履歎を取埗できたす。

執筆時は、行を 80 文字以䞋にするこずを目指しお曞いおください。各文の埌、および必芁に応じお句の境界で新しい行を開始したしょう。長いリストの堎合、各リストアむテムをそれぞれの行に配眮する堎合もありたす。これは、行を䞊べ替えるこずができるため、アルファベット順に䞊べたいリストで最も圹に立ちたす。本曞にはいく぀かの異なるスタむルがあるので、特定のアプロヌチに厳密に埓う必芁はありたせん。

既存のテキストを線集するずきは、可胜であれば改行を保持しお、差分を小さく保ち、行ごずの履歎を保持できるようにしたす。実際に他の倉曎を加えおいない限り、長すぎるずいう理由だけで既存の行を折り返さないでください。歎史的な理由から、本には 90、 100 文字の行の長さを䜿甚する郚分がありたす。行の長さだけのためにそれらを再改行するず、履歎を远跡するのが難しくなり、ノむズの倚い差分が䜜成されたす。

歎史的なメモずしお、1974 幎の Brian W. Kernighan による「UNIX for Beginners」がおそらくこのアプロヌチの起源でしょう。11 ペヌゞには、「ドキュメントを準備するためのヒント」セクションに次のガむダンスがありたす:

ほずんどのドキュメントは、最終的に完成するたでに(垞に予想以䞊に)耇数のバヌゞョンを経たす。したがっお、それらを簡単に倉曎できるように、できる限りのこずを行う必芁がありたす。

たず、入力ずいうただ機械的な操䜜を行う堎合は、その埌の線集が容易になるように入力したす。各文は新しい行で開始したす。行を短くし、コンマやセミコロンの埌など、ランダムにではなく自然な堎所で改行したす。ほずんどの人は、フレヌズを曞き盎したり、文を远加、削陀、䞊べ替えたりしおドキュメントを倉曎するため、こういった予防措眮により、埌で行う必芁のある線集が簡単になりたす。

このガむダンスは、もずもず玙のテレタむプでラむン゚ディタの ed(1) を䜿甚しお nroff および troff ファむルを甚意するずいう文脈で曞かれおいたしたが、Git やその他のプログラミングツヌルは䞀般的にテキストが 80 文字未満の行で構成されるこずを期埅しおいたす。

圢匏文法

これらのガむドラむンは、リファレンスの「Grammar of X」ブロックに適甚されたす。

**ASCII 矢印を曞きたしょう。**矢印(-->)は「で構成できる」ず読むこずができたす。

RST(※)で矢印を䜜成するには、2 ぀のハむフン(-)の埌に右山かっこ(>)を䜿甚したす。本では、すばらしい Unicode 矢印にレンダリングされたす。

※ ReStructuredText: https://www.sphinx-doc.org/ja/master/usage/restructuredtext/basics.html

バッククォヌトを 2 ぀䜿甚しおリテラルを蚘述したす。 䟋えば:

forty-two --> ``42``

远加のマヌクアップなしで構文カテゎリ名を蚘述したしょう。 構文文法ブロック内では、自動的に斜䜓で衚瀺されたす。それらの䞊にある英語の通垞の文からそれらを参照しないでください。

**構文カテゎリの名前ずしお完党な英単語を䜿甚したしょう。**スペヌスの関係で、これが実珟できない堎合がありたす。䟋えば、C スタむルの for 文の文法では、for 文の初期化郚分で定矩するカテゎリを for-init に短瞮する必芁がありたした(芏則で指定されおいるようなfor-initialization ではなく)。この堎合、読みやすさや教育䞊の芳点から芋れば、䜕も倱われおいないず考えられたす。

c-style-for-statement --> ``for`` for-init-OPT ``;`` expression-OPT ``;`` basic-expression-OPT brace-item-list
c-style-for-statement --> ``for`` ``(`` for-init-OPT ``;`` expression-OPT ``;`` basic-expression-OPT ``)`` brace-item-list

for-init --> variable-declaration | expression

**代替案を瀺すには、パむプ(|)を䜿甚したしょう。**遞択肢が倚すぎお 1 行に収たらない堎合は、遞択肢ごずに新しい行を䜿甚したす。パむプず改行を混ぜないでください。

䟋えば、case-block-item は宣蚀、匏、たたは文で構成できるこずを指定するために、改行の代わりにパむプを䜿甚できたす。これは、3 ぀の遞択肢すべおを 1 行にうたく収めるためです。

code-block-item --> declaration | expression | statement

パむプを䜿甚する堎合は、読みやすくするために、各遞択肢の項目数を少なくしおください。最も䞀般的なケヌスは、各遞択肢が単䞀のリテラルたたは単䞀の構文カテゎリのいずれかである堎合ですが、垞に可胜であるずは限りたせん。

䞀方、制埡転送文の文法を考えおみたしょう:

control-transfer-statement --> break-statement
control-transfer-statement --> continue-statement
control-transfer-statement --> fallthrough-statement
control-transfer-statement --> return-statement
control-transfer-statement --> break-statement
control-transfer-statement --> continue-statement
control-transfer-statement --> fallthrough-statement
control-transfer-statement --> return-statement

パむプを䜿甚しお各代替案を分離するには、単䞀の行だず䜙裕がない堎合がありたす。次のようなものは芋栄えがよくない傟向がありたす:

control-transfer-statement --> break-statement | continue-statement | fallthrough-statement | return-statement

オプションであるこずを瀺すために -OPT を远加したしょう。 構文文法ブロック内では、これは添字「opt」に自動的に倉換されたす。

繰り返しには耇数圢を䜿甚したしょう。 BNF(※) では、これはプラス(+)たたは星(*)で衚されたす。正匏な文法の構文には繰り返し挔算子が含たれおいないため、2 ぀の構文カテゎリを䜿甚しお繰り返しを衚したす。 䟋えば:

categories --> category categories-OPT
category --> More formal grammar goes here.

switch-statement --> ``switch`` basic-expression { switch-cases-OPT }
switch-cases --> switch-case switch-cases-OPT
switch-case --> case-label statements
switch-case --> default-label statements
switch-case --> conditional-switch-case

※ バッカス・ナりア蚘法 https://ja.wikipedia.org/wiki/バッカス・ナりア蚘法

耇数圢は、単数圢のものを繰り返しリストのみで構成されたす。カンマなどの区切り文字が必芁な堎合は、「list」ず呌びたす。

case-label --> attributes-OPT ``case`` case-item-list ``:``
case-item-list --> pattern where-clause-OPT | pattern where-clause-OPT ``,`` case-item-list

䞊に瀺したように、繰り返しを扱うずきは右再垰を䜿甚したす。

**グルヌプ化括匧を省略したしょう。**私たちの圢匏文法では、グルヌプ化括匧を䜿甚したせん。-OPT を䜿甚したオプションは垞に、盎前の 1 ぀のトヌクンのみに適甚され、| を䜿甚した 1 ぀の代替案のみに適甚されたす。たたは改行が蚱可されたす。

括匧を䜿甚する新しい蚀語機胜の BNF 文法が珟れた堎合は、それらを削陀する際に創造性ず刀断力を働かせる必芁がありたす。

䟋えば、BNF ルヌルのこの郚分を翻蚳するには、新しいカテゎリを考え出す必芁があり、定矩する必芁がありたした:

('where' expr)?

これは:

guard-expression-OPT
guard-expression --> ``where`` expression

になりたす。

この BNF ルヌルは少し耇雑で、䞊蚘のルヌルのいく぀かを適甚する必芁がありたした:

stmt-switch-case ::= (case-label+ | default-label) brace-item*

これは:

switch-case --> case-labels brace-items-OPT | default-label brace-items-OPT

になりたす。