Java使いがSwiftを学ぶ – #1 基本構文

2015.10.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Swiftはじめました

最近、いまさらながらSwiftをさわり始めました。
Ojective-Cは、あの独特の記法がどうも苦手で避けてきたのですが、
SwiftはAppleが「モダンです」といっているように、すんなりと受け入れられました。

自分はもともとJavaメインでやってきたのですが、ここではJavaとSwiftのコードを比較しつつ、
基本〜各種構文をまとめていきます。

Swiftとは

Swiftは2014年6月にWWDCで発表されたプログラミング言語です。(現在は2.0)
言語自体は最近の風潮をとりいれており、とっつきやすい(自分は)構文になっています。
また、先程もいったように、「モダン・安全・高速・インタラクティブ」なプログラミングが可能で、
次のような機能も持っています。

  • XcodeのPlaygroundsやコンソールのREPLで簡単に動作確認できる
  • クロージャ/ジェネリクス/Optionとか使える
  • 静的な型のチェック/数値のオーバーフロー検査/自動参照カウントのメモリ管理の機能を持つ
  • if文のブレース省略不可/switch文はbreakいらず

Swiftの実行方法

Swiftのコードを実行する方法はいくつかあります。
XcodeでプロジェクトのLanguageを「Swift」で作成するか、playgroundを作成します。
それ以外にも、コンソールで「swift」と入力すれば、REPLが起動するので対話形式でswiftの動作を確認できます。

動作環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.10.5
  • Xcode : 7.0.1
  • Java : 1.8

Swiftの基本構文をいっきに

では、Javaと比較しつつSwiftの基本構文をまとめていきます。

コメント

Java・Swiftどちらも、「//」で単一行コメント、「/* */」で複数行のコメントです。  

変数/定数

Swift

//変数定義 : var name:Type = value
var number:Int = 10

//定数定義 : let name:Type = value 
let PI:Double = 3.14

型推論により省略可能。

Java

//変数定義
int number = 10;

//定数定義
final double PI = 3.14;

複数の変数を宣言できます。
Swift

//複数の変数宣言
var (a,b) = (1,2)

Javaだと下記のようになります。
Java

//複数の変数宣言
int a = 1, b = 2;

主な型

Swiftで使用する主な型は以下のとおりです。
xxx32とかxxx64とかの型は、それぞれ型のビット数。

Swift Java
真偽値 Bool boolean/Boolean
符号あり整数 Int・Int8・Int16・Int32・Int64 int/Integer・long/Long
符号なし整数 UInt・UInt8・UInt16・UInt32・UInt64 なし ※1
バイト Byte byte/Byte
文字 Character char/Character
文字列 String String
浮動小数点 Double・Float・Float32・Float64・Float80 fload/Float・double/Double

※1 各ラッパークラスのtoUnsigned系メソッドを使用すれば実現可能

変数うめこみ

\(<変数名>)で埋め込み。

Swift

var name = "taro"
print("my name is \(name)")

String.formatで埋め込み。(使ったことない・・・)

Java

String name = "taro";
System.out.println(String.format("my name is %s", name));

数値リテラル

Swiftでは、数値を4桁毎に_で区切ることができます。

Swift

//1234569878 と同じ
print(0012_3456_9878)

x進数の数値リテラルは下記のとおりです。

Swift

//2進数は頭に0b
print(0b1111)
//8進数は頭に0o
print(0o123)
//16進数は0x
print(0xffff)

Javaにおいても、2進数は頭に0b、8進数は頭に0、16進数は頭に0xをつけることで
数値リテラルを記述可能です。

エスケープ

エスケープ文字は、だいたいJavaとSwiftは同じです。

特殊文字 Swift Java
ダブルクオート \" \"
バックスラッシュ \\ \\
タブ \t \t
キャリッジリターン \r \r
ラインフィード \n \n
ヌル文字 \0 なし

数値演算・代入演算子・比較演算子・論理演算子

数値演算で使用するのは、Javaと同じく、「+」「-」「/」「*」「%」です。
ちなみに、「+」「-」「*」の計算で結果をオーバーフローさせても良い(エラーを出したくない)場合、
演算子の前に「&」をつければ、エラーを回避することができます。
Swift

//計算結果をオーバーフロー表示させる
var x:Int8 = 100
var y:Int8 = 100
var result = x &* y

また、+=等の代入演算子も同じく使用可能です。
インクリメントやデクリメントも前置き・後ろ置きが同じくあります。
比較演算子も 「==」「!=」「 >」「 <」「>=」「<=」があります。 論理演算子である、「&&」「||」「!」もJavaと同じ動作になります。

キャスト

Swiftでダウンキャストするには、asまたはas!演算子を使います。
Swift

//アップキャストやリテラルの明確化はas
var f = 1 as Double


class Parent {
    ・・・
}

class Child : Parent {
    ・・・
}

//ダウンキャストはas!
var p:Parent = Child()
var tmp:Child = p as! Child

Javaの場合には (型)変数名 でキャストします。
Java

class Parent {
    ・・・
}

class Child extends Parent {
    ・・・
}

Parent p = new Child();
//ダウンキャスト
Child tmp = (Child)p;

まとめ

とりあえず、Swiftの超基本部分についてまとめました。
次は制御構造の予定です。

参考サイトなど