📘

SwiftやiOSのSDKに見られるBooleanプロパティの三人称単数現在形命名規則

に公開

⚠️ Opusのリサーチによるものです

SwiftとiOSのSDKにおけるBooleanプロパティの三人称単数現在形命名規則

1. なぜ三人称単数現在形が使われるのか

Swift's API Design Guidelinesによると、Booleanプロパティは「レシーバーに関する表明(assertion)として読めるべき」という核心的な原則があります。requiresNetworkallowsEditingsupportsMultipleWindowsなどの三人称単数現在形が使われる理由は:

自然な言語フロー: プロパティがオブジェクトの能力や要求に関する文として読める

  • requiresNetwork → "This component requires network access"
  • allowsEditing → "This view allows editing"
  • supportsMultipleWindows → "This app supports multiple windows"

文法的完全性: 英語の文法規則に従い、主語(暗黙のオブジェクト)と述語(プロパティ名)が完全な文を形成します。

2. なぜ一人称現在形や動詞の原形が使われないのか

動詞の原形(requireNetwork)の問題点

  • 命令形として聞こえる("Require network!"のように)
  • 不完全な不定詞句のように感じられる
  • 文法的な完全性が欠如している
  • ネイティブスピーカーにとって認知的不協和を引き起こす

一人称現在形の不適切さ

  • プロパティは第三者(オブジェクト)の特性を説明するものであり、一人称は意味的に不適切
  • 英語では「it requires」(三人称)が自然で、「I require」(一人称)はオブジェクトの説明として不自然

3. 英文法の観点から見た三人称単数現在形の意味と役割

言語学的研究によると、三人称単数現在形には以下の特徴があります:

文法的マーキング: 英語では動詞に-s/-esを付けることで三人称単数を示す

  • 規則動詞:require → requires、allow → allows、support → supports
  • この形式は英会話の45%を占め、最も頻繁な主語-動詞の組み合わせ

暗黙の文構造

[This component] requires network [access]
[This feature] allows editing
[This application] supports multiple windows

プロパティ名は、理解された主語を持つ三人称単数述語として機能し、-s語尾が単数エンティティについて話していることを示します。

4. ネイティブ英語話者の認識と理解

認知言語学の研究によると、ネイティブスピーカーは以下のように処理します:

意味的手がかり: -s語尾は即座に文法的文脈を提供し、以下を示します:

  • プロパティが単数エンティティの能力や状態を説明している
  • 関係が能動的/継続的である
  • プロパティがオブジェクトの振る舞いに関する事実的表明を表している

チャンキングと記憶: ネイティブスピーカーは馴染みのある文法パターンに基づいて情報を自然に「チャンク化」します。三人称単数形は、英語話者がオブジェクトの能力や状態を通常説明する方法と一致し、コードをより直感的に読みやすく記憶しやすくします。

5. プロパティが主語として機能する際の文法的解釈

Booleanプロパティは完全な述語文として機能し、オブジェクト(「このコンポーネント」「この機能」「このシステム」)が暗黙の主語となります:

if view.clipsToBounds { 
    // "If [the view] clips to bounds..."
}

if array.isEmpty {
    // "If [the array] is empty..."
}

この構造により、文法的に完全な思考が作成され、プロパティ名は理解された主語を持つ三人称単数述語として機能します。

6. Apple's Swift API Design Guidelinesにおける具体的な指針

公式ガイドラインの核心的な記述:

"Uses of Boolean methods and properties should read as assertions about the receiver when the use is nonmutating, e.g. x.isEmpty, line1.intersects(line2)."

主要な要件

  • Booleanプロパティはレシーバーに関する表明として読めるべき
  • 使用時に文法的な英語フレーズを形成すべき
  • 使用時点での明確性を優先すべき
  • コードは自然言語の文のように読めるべき

7. 他のプログラミング言語との比較

各言語のアプローチ

Java: JavaBeansの慣習に従い「is」プレフィックスを厳格に使用

boolean isNetworkRequired()
boolean isEditingAllowed()

C#: 自然言語フレーズを使用し、Swiftに類似

bool RequiresNetwork { get; }
bool AllowsEditing { get; }

Objective-C: Swiftの前身で「is」プレフィックスを使用

@property (getter=isNetworkRequired) BOOL networkRequired

現代的な言語のトレンド: Swift、Rust、TypeScriptなどは、厳格なプレフィックス規約よりも自然言語パターンに向かっています。

8. isXxx、canXxx、shouldXxxとの使い分け

一般動詞(三人称単数)

能力、要求、または動作を説明する際に使用:

  • requiresNetwork - 要求を説明
  • allowsEditing - 許可を説明
  • supportsMultipleWindows - サポートを説明
  • acceptsFirstResponder - 受け入れを説明

助動詞プロパティ

状態や条件に使用:

  • isEnabled - 現在の状態
  • canEdit - 現在の能力
  • shouldLayout - 推奨または指示

選択基準

  • オブジェクトが何をする、要求する、またはサポートするかを説明する場合は三人称単数を使用
  • 現在の状態、即座の能力、または条件付き動作を説明する場合は助動詞を使用

9. 実際のiOS SDKとSwift標準ライブラリでの使用例

UIKitの例

// UIView
clipsToBounds
translatesAutoresizingMaskIntoConstraints
preservesSuperviewLayoutMargins
autoresizesSubviews

// UIScrollView
scrollsToTop

Foundation/標準ライブラリの例

// String
isEmpty
hasPrefix(_:)
hasSuffix(_:)
contains(_:)

// Array/Collection
isEmpty
contains(_:)

SwiftUIの例

// Transaction
disablesAnimations

10. この命名規則の開発者にとっての利点

自己文書化

if view.isHidden { ... }        // "If the view is hidden..."
if array.isEmpty { ... }        // "If the array is empty..."
if view.clipsToBounds { ... }   // "If the view clips to bounds..."

認知負荷の削減

研究によると、自然言語パターンに従う識別子は:

  • 理解に必要な精神的処理を削減
  • コード保守中の理解エラーを減少
  • 記憶保持を向上

一貫性の利点

  • APIを予測可能にする
  • コードレビューとコラボレーションを促進
  • 保守性を向上
  • Swiftエコシステムとの統合を改善

表現力の向上

三人称単数形により、コードがオブジェクトの能力と要求についてより表現豊かで正確な文を作成できます。これにより、開発者の意図がより明確に伝わり、バグの可能性が減少します。

結論

Swiftの三人称単数現在形のBooleanプロパティ命名規則は、自然言語の可読性を優先する洗練されたアプローチを表しています。この規約は、深い言語学的および認知的原則を反映しており、プログラムの理解と保守性を向上させます。JavaやObjective-Cのような言語が歴史的理由やツールの互換性のために「is/has/can」プレフィックスに大きく依存している一方で、Swiftのアプローチは、コンテキストで自然に読める直接的な表明を使用することで、人間の言語とコンピューターコードの間の効果的な橋渡しを作成しています。

Discussion