コピペSEが携帯アプリで一攫千金を狙うブログ

SEやってます。Javaラーです。主な仕事はコピペです。携帯アプリ、イチから作っていきます。

いっきに基本構文(1):キホンのキ

ブログ始めて二週間?経ちました。

最近のブログはアクセス解析も標準装備なんですね、便利です。

とりあえず、はてな内の新規開設したブログ一覧とかからが多いですが、

びっくりしたのは適当に選ばせてもらったブログテーマからのアクセスが多いですね。

なるほど、こういうアクセス数稼ぎもあるのか。

Webは専門外なんで勉強になります。

さて、前回までは妄想記事、ここから始めて技術的な記事書きます。

気を付けて書きますが、如何せんコピペSEなので間違いや語弊を多く含んじゃうと思います。

注意してもらえたら嬉しいです。



SwiftはObjective-Cに比べ、JavaPythonに近いオブジェクト指向らしい形態となっているらしいです。

とはいえ、構文の微妙な違いは付き物で

どうだっけなと毎回ググる日々からおさらばすべく、一気に基本構文まとめようと思います。

前提

環境

OS OSX El Capitan 10.11.5
Xcode 7.3.1
言語 Swift 2.2

一行の終わり

セミコロン付けてもいいし、付けなくてもいいです。
多分、Apple的には無くす方向でやりたいけど、
昔ながらの人はセミコロン無いと蕁麻疹出るみたいで、
そういう人の為にセミコロン付けれる仕様にしたと邪推してます。
せっかく省いてくれたんで、僕は基本的に付けません。

var nonSemicolon = "セミコロン無し"
var semicolon = "セミコロン有り";

使える文字

半角英数はもちろん、全角だって使えます。
ただ僕はコメント以外に全角あると蕁麻疹出る人なんで使いません。

var 変数 = "全角だよ"
var variable = "半角英数だよ"

はてな記法のSwiftシンタックスハイライトは全角対応してないのか笑

標準出力

print()です。シンプル。

print("Hello world")

Swift2より前はprintlnで改行コメントでしたが
Swift2からはprintのデフォルトが改行付きになってprintlnは廃止らしいです。
テストソースとか真っ赤なったんだろうな・・・
改行無しで出力したい時はterminator(改行コード)の指定をブランクにすればいいらしいです。

print("Hello world1 ", terminator:"" )
print("Hello world2")
実行結果
Hello world1 Hello world2

コメント

ワンライナー

// 〜 です

// One Line Comment

ブロックコメント

/* 〜 */ です。分かりやすい。素敵。

/* Block Comment
 line1
 */

変数定義

変数

varを付けます。

var variable = "変数だよ"

定数

letを付けます。ありのまま(?)です。

let constant = "定数だよ"

letは略語じゃなく、そのままの英単語で、数学なんかで
仮にXを100とする、みたいな時に使われる単語らしいです。
constの方が分かりやすかったな・・・

複数定義

かっこで括ります。そんな使わないかな。

var (num1,num2) = (1,2)

初期値について

2016/6/14追記
初期値については、定義してもしなくても良いみたいです。
定義しない場合はnilJavaでいうNull)が入ります。

ただし、使えません。

var str: String
str = ""         // ちゃんと値を入れてあげても
if str == nil { // ここでコンパイルエラー
    print("OK")
}

Javaは初期値が設定されてないとワーニングが出てた気がします。若干使い勝手が異なりますね。

そういう場合はOptionalを使います。

Optional値について

初期値を設定したくない場合、値がnilかもしれないというのを明記しないといけません。

var 変数名: 型?

この?がオプショナルであるという定義になります。
中身は空かな?の「?」です。

var str:String?
if str == nil {
    print("OK")
}
実行結果
OK

値が確実に入ってると明記したい場合は ! を付けます。
中身入ってるよ!の「!」です。

var str:String?
str = ""
if str! == "" {
    print("OK")
}
実行結果
OK

ちなみに値入ってないのに入ってるなんて嘘つくと
実行時エラーという恐ろしい結果が待っているのでご注意をば。

文字列の埋め込み

\(変数)です。文字列に埋め込む場合は""の中に書きます。
これJavaラーとしては地味に抵抗あります。繋げたきゃプラスでええやん。。

print("num1:\(num1)")
実行結果
num1:1

型宣言

暗黙変換が使えます。基本型なら定義しなくて良いらしい。
ここまでの例文も使ってないです。
ちゃんと定義したければ
var 変数名: 型 = 値
らしいです。これもJavaラーとしては抵抗ある。。

var variable: String = "文字列です!"

ちなみにコロン前後、イコールの前後もですがスペースはあってもなくても良い感じにしてくれます。

Swiftの基本的な型の名前は以下の通り。

種類 名前
文字列 String
文字 Character
バイ byte
真偽値 Bool
整数 Int・Int8・Int16・Int32・Int64
符号無し整数 UInt・UInt8・UInt16・UInt32・UInt64
浮動小数点あり Double・Float・Float32・Float64・Float80

後ろに数値付きは型のビット数らしいです。
UIntとかいうの含め、Javaでは馴染み無い型だな。
多分個人で使う事は無さそう。

配列については、操作(map とか)も含めてちゃんとまとめたい(勉強したい)んで、後日書きます。

演算子

四則演算

そのままです。

let add = 1 + 1 // 足し算(2)
let sub = 1 - 1 // 引き算(0)
let multi = 1 * 2 // 掛け算(2)
let div = 1 / 1 //割り算(1)
let rem = 3 % 2 // 余り(1)

演算子の前後スペースはあってもなくても良いけど
統一はしないとダメみたいです。

let add1 = 1 + 1 // 大丈夫
let add2 = 1+1 // 大丈夫
let addError = 1 +1 // 片方だけスペースあるんでコンパイルエラー

代入演算子

これもJavaそのままなのでサラっと。

let val = 1
var addeq = 1
addeq += val // 自身に足して代入(2)
var subeq = 1
subeq -= val // 自身から引いて代入(0)
var incBefore = 1
++incBefore // インクリメントして処理(2) ※ワーニングが出る、Swift3からはなくなるらしい
var incAfter = 1
incAfter++ // 処理してインクリメント(2) ※ワーニングが出る、Swift3からはなくなるらしい

比較演算子

これもJavaそのままなので(ry

var eq = 1 == 1 // 同値(true)
var not = 1 != 1 // 否定(false)
var more = 2 >= 1 // 以上(true)
var less = 1 <= 2 // 以下(true)
var above = 2 > 1 // 超(〜より大きい)(true)
var below = 1 < 2 // 未満(true)

論理演算子

これもJava(ry

var and = (1 != 1 && 1 == 1) // 論理積(false)
var or = (1 != 1 || 1 == 1) // 論理和(true)
var not = !(1 != 1 || 1 == 1) // 否定(false)

PlayGroundについて

あまりXcodeの使い方はまとめる気がなくて、
というのも使いこなせてない&使いながら覚える気なので
まとめるとしたらだいぶ後からになります。

ただ、この記事を書く時に利用したXcodeの機能で、PlayGroundだけ紹介します。
直訳で遊び場?簡単なソース試すためのプロジェクトが作れます。
Java(Eclipse)ではそれ用のプロジェクト作ってて、本番とテストプロジェクトがパッと見分からなくなったり・・・
そんな、ずぼらな方でもこれなら大丈夫。

Xcode起動して「Get started with a playground」を選択

するとこんな感じなります。
変数の値や値の変化グラフなど見れて便利です。

次回について

一気にとか言いつつバテました(
あと3回ぐらいは分けて書こうかな・・・
あとは制御構文と構造体、それと配列操作ぐらいですかね。
いつになったらアプリ作れるんだろ・・・