Swiftと実存

## TL;DR

- 「実存は本質に先立つ」
    - オブジェクトはまず存在し、その後に型を見出す。
- 実存主義（Existentialism）とSwiftの実存型（Existential Type）の根底には共通の思想があるのかもしれません。
- Swiftを通じたプログラミング体験は、実存主義における自己決定と自己実現の過程として解釈することができます。

## はじめに
### 実存主義とは何か、その基本的な考え方
実存主義は20世紀において重要な哲学的動向であり、ジャン＝ポール・サルトル、フリードリヒ・ニーチェ、マルティン・ハイデッガーなどの思想家によって形成されました。この哲学は、個人の存在、自由、選択、そして主体性に重点を置いています。実存主義者たちは、人間の存在は本質的な特性や普遍的な定義によって決まるのではなく、個々人の経験と選択によって形成されると考えます。

サルトルの<b>「実存は本質に先立つ」</b>という言葉は、人間の存在が先天的な本質や目的に束縛されることなく、個人の行動と決断によって定義されるという考えを表しています。彼によれば、人間は自らの存在を意識し、その中で自由に選択を行い、自分自身のアイデンティティを創造していきます。このプロセスは、自己実現と個人の責任の概念に密接に関連しています。

実存主義は、個人の内面的な経験と外界の現実との関係を重視しています。それは、人間が自分自身と世界との関わりの中で、常に自己を再定義し、新たな意味を創出する過程に焦点を当てるという哲学で、人間の存在の根底にある自由と選択の能力を強調し、人生の意味を個人の主体的な経験と解釈に委ねています。



## Swiftの実存的要素

### Swiftの実存型
Swiftにおける実存型は、特定のプロトコルに準拠する任意の型のインスタンスをを受け入れることができますが、それらの具体的な型は実行時まで特定されません。これは、型安全性を保ちながら、異なる型に対して同じインターフェースを使用する柔軟性を提供します。

#### 主な特徴
1. **プロトコルの実装:** 実存型は、特定のプロトコルを準拠する全ての型の値を格納できます。これにより、異なる型でも共通のプロトコルに従っていれば、同じ方法で扱うことができます。
2. **型の抽象化:** 実存型を使うことで、具体的な型に依存することなく、プロトコルのインターフェースを通じて操作を行うことができます。これは、多様な型に共通の動作を適用したい場合に有用です。
3. **型安全性:** Swiftは静的型付け言語であるため、実存型を使用しても型安全は保たれます。コンパイラはプロトコル準拠をチェックし、準拠していない型の使用を防ぎます。

#### 実装例
```swift
protocol Drawable {
    func draw()
}

struct Circle: Drawable {
    func draw() {
        print("○")
    }
}

struct Square: Drawable {
    func draw() {
        print("■")
    }
}

let shapes: [any Drawable] = [Circle(), Square()]
shapes.forEach { $0.draw() }
// ○
// ■
```
この例では、`Drawable` プロトコルに準拠する任意の型のインスタンスを `shapes` 配列に格納しています。`Drawable` は実存型として機能し、`Circle` と `Square` の両方を同じ配列に保持して、それぞれの `draw` メソッドを呼び出しています。これにより、異なる型でも共通のインターフェースを介して操作を行うことができます。


## 実存主義と実存型の統合的洞察
実存主義とSwiftの実存型に関する統合的洞察は、異なる分野間の共通性と相互作用に光を当てます。これら二つの概念は、哲学とプログラミングの異なる領域に属しながらも、形態と内容の関係において重要な思想を共有しています。

両者は、<b>「形態が先行し、内容が後から定義される」</b>という共通のプロセスを持っており、このプロセスはそれぞれの領域において重要な意味を持ちます。

実存主義では、人間がまず存在し、その後で自らの本質を選択と行動を通じて定義するという考え方を提唱します。

一方で、Swiftの実存型では、異なる型のデータを統一されたインターフェースを通じて扱う柔軟性を提供します。プロトコルは「形態」を提供し、具体的な型はこの形態に準拠して後から定義されます。

両者とも、ある種の柔軟性と動的な定義のプロセスを重視しています。

このように、哲学とプログラミングは表面的には異なるように見えますが、実存主義とSwiftの実存型を通じて、それぞれの分野がどのように「実存」という概念を扱っているかを理解することで、両者間の類似点や相互作用を発見することができます。この統合的な視点は、人間の自由と技術の可能性という二つの重要な概念を結びつけ、深い洞察を提供します。

#### 宗教的思想
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95033/022a3dcf-0a4c-6632-69e0-926d1f679edd.png">

#### 実存主義の思想
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95033/11e4a2ca-05e9-7c6f-7c8f-caed159a567d.png">

#### Swiftの実存型の思想
<img width="580" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95033/bf9aa05b-38ff-0fdb-32df-7ecdeacf7e57.png">



## Swiftを通じた実存的な開発体験

### プログラマとしての成長と実存主義の関連性
プログラマの成長と実存主義の関連性について、Swiftプログラミング言語の使用がどのように役立つかを探ります。
Swiftはその読みやすく、書きやすいシンタックスで知られており、プログラマに直感的で効率的なコードの記述を可能にします。この言語を使用することで、プログラマは技術的スキルの向上だけでなく、問題解決、創造的思考、自己表現の自由と技術的制約のバランスを学ぶことができます。

実存主義の視点からは、Swiftを用いたプログラミングは自己決定と自己実現の過程として捉えることができます。プログラマは、技術的な問題に対する独自の解決策を創造し、このプロセスを通じて自分の能力とアイデンティティを形成します。この創造的な自由を活用することで、プログラマは自己表現の手段としてコードを書き、個人的な成長を遂げることが可能です。


## まとめ
### 実存主義とSwiftがどのように世界を豊かにしているか
人間の存在の探求とSwiftの美学(簡潔さ、明快さ、読みやすさ)を結びつけると、人間の創造性と技術の関係が浮かび上がります。実存主義が人間の主体性と自由意志を強調するように、Swiftもプログラマが自らの創造性を発揮しやすい環境を提供します。Swiftは、コードを通じてプログラマが自分のアイデアを現実化し、意味あるソフトウェアを創造する手段を提供します。これは、実存主義の「自己決定」の概念と共鳴し、技術が人間の創造的な表現の一形態であることを示唆しています。

このように、人間の存在の哲学とSwiftの美学は、個人の創造性、自由、そして意味の創造という点で共通のテーマを持っています。人間が自己を表現し、世界に影響を与える方法として、技術、特にプログラミング言語は重要な役割を果たしているのです。