# プログラミング言語Swiftとは

# Swiftとは

Swiftは2014年にAppleが発表したオープンソースのプログラミング言語です。iOS、macOS、iPadOS、watchOS、tvOS向けのアプリケーション開発、またサーバー向けのアプリケーション開発も可能です。iOSやmacOSのアプリ開発において、これまではObjective-Cという言語が使われてきました。Objective-Cは初学者にとって複雑で学習コストが高い言語でしたが、Swiftは見た目のシンプルさとモダンな言語の特徴を取り入れることにより初学者にも学習しやすいように開発されました。

# Swiftの特徴

Swiftは次のような特徴があります。

# モダンな設計

Swiftはモダンなプログラミング言語にある特徴を取り入れ、読みやすくメンテナンスしやすいように設計されています。セミコロンの排除や、型推論、クロージャ、ジェネリクス、ネームスペースなどが利用でき、開発者にとって学習しやすいように日々進化をしています。

# 静的型付き言語

# 型の安全性

Swiftは静的型付きの言語として設計されています。静的型付き言語の大きな特徴として、安全性が高く大規模なプログラム開発に向いているという点があります。RubyやJavaScriptなどの動的型付き言語では、プログラムを書くときに変数や関数に何が入ってくるか型を宣言する必要がないため、簡単に実装できる反面、プログラムを実行するまでエラーやバグに気づきにくいことがあります。

例えば、存在しない変数を指定してもプログラムは実行できますが、実行したときに初めてバグに気づきます。大量のコードの中に埋もれていると、人の目で見つけることは難しいでしょう。

一方、静的型付き言語の場合は、プログラムを書く際に型を指定できるので実行する前のコンパイルの段階で正確に型をチェックし、プログラムとしての妥当性を広い範囲で確認することができます。

Swiftは静的型付きの言語なので、次のようにString型にInt型を代入しようとするとコンパイルエラーになります。

var a: String = 123

/* 実行結果 */
// main.swift:3:17: error: cannot convert value of type 'Int' to specified type 'String'
// var a: String = 123
// compiler exit status 1

このようにコンパイル時にエラーを検出するため、より高い安全性が保証されているのです。

# 型推論による開発のしやすさ

Swiftは型を指定できますが、型推論というしくみがあるため明示的に型を指定しなくてもコンパイラが自動で推測してくれる機能があります。

例えば、次のように定数にString型のHelloを代入すれば、明示的に型を宣言しなくてもコンパイラがString型として解釈してくれます。

var a = "Hello"

型推論を活用することで、より簡潔にかつ安全にプログラムを書くことができます。

# ジェネリクスによる汎用性

ジェネリクスとは、さまざまなデータの型に対応するために関数に任意の型を渡すことで汎用的に型を指定できる仕組みです。 このような仕組みをもつプログラミングをジェネリックプログラミングと呼び、Swiftではこのジェネリックプログラミングのためにジェネリクスが提供されています。

例えば、次の関数はジェネリクスを使ったものになります。

func genericTuple<T>(_ value: T) -> (T, T) {
    return (value, value)
}

<T> は型引数といい、この <T> が与えられた値によって具体的な形に置き換えられます。

例えば、Int型の値を引数に渡して実行してみましょう。

var tuple1 = genericTuple(123)

print(tuple1) // (123, 123)
print(type(of: tuple1)) // (Int, Int)

Int型の値を含むタプルが返ってきました。

次に、String型の値を引数に渡して実行してみましょう。

var tuple2 = genericTuple("Hello")

print(tuple2) // ("Hello", "Hello")
print(type(of: tuple2)) // (String, String)

同様にString型を含むタプルが返ってきたのが分かります。

このように、関数に抽象的な型を定義しておくことで柔軟に具体的な型を指定することができます。

# Objective-Cとの互換性

iOSなどのアプリケーション開発ではObjective-Cが使用されてきました。SwiftはObjective-Cのコードをほぼすべて使用できます。CocoaなどのフレームワークはObjective-Cで実装されていますが、開発者は従来のコードでも、容易にSwiftへと移行できるようになっています。

# パフォーマンスに優れている

Swiftは開発当初からハイパフォーマンス性を重視して開発されました。例えば、LLVMコンパイラを使用することで、最新のハードウェアの性能を十分に引き出せるように設計されています。

# Swift5の特徴、機能

Swift5の導入によりさらなる機能が追加されました。

  • String型がUTF-8エンコーディングで再実装されたため、より高速なコードの実行が期待できます。
  • デバッグ用ビルドとリリース用ビルドの両方で、メモリへの排他アクセスがデフォルトで必須になりました。
  • SIMD VectorおよびResult型が標準ライブラリに追加されました。
  • DictionaryとSetのパフォーマンスが改善されました。
  • 動的に呼び出し可能な型をサポートするようになり、Python、JavaScript、Rubyといった動的言語との相互運用性が強化されました。

詳しくは、公式ドキュメントを参照ください。