Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
初心者向けSwift勉強会#1 ~Swift文法編~
Search
吉川楓馬
December 23, 2023
Programming
0
140
初心者向けSwift勉強会#1 ~Swift文法編~
12月23日に開催されたSwift勉強会#1の資料です。
吉川楓馬
December 23, 2023
Tweet
Share
More Decks by 吉川楓馬
See All by 吉川楓馬
Githubのプロフィールページをおしゃれにしよう
yoshikawa0918
1
440
初心者向けSwift勉強会#3
yoshikawa0918
0
81
初心者向けSwift勉強会#2
yoshikawa0918
0
100
九州アプリチャレンジ・キャラバンに参加してきた話
yoshikawa0918
0
96
東京Flutterハッカソン行ってきたよ!!
yoshikawa0918
0
360
AkarengaLT_16_スライド.pdf
yoshikawa0918
0
84
ProcessingでAndroidアプリを作ろうの会
yoshikawa0918
0
230
サンプルを使って学ぶFlutter
yoshikawa0918
1
320
Other Decks in Programming
See All in Programming
Flatt Security XSS Challenge 解答・解説
flatt_security
0
740
BEエンジニアがFEの業務をできるようになるまでにやったこと
yoshida_ryushin
0
200
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
220
Package Traits
ikesyo
1
210
rails newと同時に型を書く
aki19035vc
5
710
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
370
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
210
[JAWS-UG横浜 #80] うわっ…今年のServerless アップデート、少なすぎ…?
maroon1st
0
100
Amazon Nova Reelの可能性
hideg
0
200
テストコード書いてみませんか?
onopon
2
340
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.4k
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.4k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Typedesign – Prime Four
hannesfritz
40
2.5k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Designing for Performance
lara
604
68k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Building Adaptive Systems
keathley
38
2.4k
The Cult of Friendly URLs
andyhume
78
6.1k
Transcript
初⼼者向けSwift勉強会#1 ~Swift文法編~
エンジニアカフェについて
エンジニアカフェについて エンジニアが集まる、活躍する、成長する街、福岡。 https://efc.isit.or.jp
エンジニアカフェへのアクセス 営業時間 9:00 - 22:00 / 相談受付時間 13:00 - 21:00 / 休館日毎月最終月曜日 https://engineercafe.jp/
⾃⼰紹介
⾃⼰紹介 • 名前 吉川楓⾺ • 所属 九州産業⼤学 理⼯学部 情報科学科 3年 • 出⾝地 ⼤分県
• 趣味 カードゲーム(遊戯王)/モバイルアプリ開発(Flutter) • 実はSwift勉強したてです。間違えてしまうところもあるかと思いま すが、皆さんと⼀緒に勉強していけたらいいなと思ってます〜。
本⽇のメニュー • Swift/Swift Playgroundとは • メッセージを表⽰してみる(print関数) • 定数と変数 • if⽂/for-in⽂
• 配列 • 関数 • 構造体とクラス
Swift/Swift Playgroundとは
Swift/Swift Playgroundとは Swift…2014年にApple社が開発したiOS,Mac,Apple TV,Apple Watchアプリ開発向けのオープンソースのプログラミング⾔語。 Swiftという名前の通り処理速度が⾼速なのが特徴である。 Swift Playground…Swiftを学ぶことができるアプリケーション。 プログラミングを学ぶだけでなくアプリ開発をすることもでき る。
Swiftコーディングを始める それではSwiftコーディングを始めましょう。 Swift Playgroundを開き、メニューバーの[ファイル]>[新しいブッ ク]でプレイグラウンドブックを開きましょう。
Swiftコーディングを始める プレイグラウンドブックの 説明 ①エディター ②コンソール ③候補 ④コードを実⾏ ⑤コンソールの開閉
メッセージを表⽰してみる(print関数) まずは⽂字列を表⽰してみましょう。 以下を記⼊してください。 print("Hello world") 記⼊が終わったら、コードを実⾏して みましょう。 括弧内に好きな⽂字列を⼊⼒して実⾏ して遊んでみましょう。
メッセージを表⽰してみる(print関数) 次に数値計算をしてみましょう。 以下を記⼊してください。 print(120 + 80 - 50) コードを実⾏してみましょう。 四則演算の演算⼦
+(加算) ー(減算) *(乗算) ∕(割算)
メッセージを表⽰してみる(print関数) 数値を⽂字列と連結させて表⽰してみ ましょう。 print(String(100) + "円") Stringメソッドで100を⽂字列化した 後に、"円"と連結させる。 また、⽂字列同⼠の連結には+が使え る。
メッセージを表⽰してみる(print関数) そのほかの演算⼦と計算の優先順位について 剰余演算⼦ % 割ったあまりを求める (例) 10 % 5 = 0
9 % 2 = 1 8 % 3 = 2 計算の優先順位 計算の優先順位は現実の算数と同じ優 先順位で計算される。 例1:2 + 5 * 2 この場合は12 例2:5 * (3 + 4) この場合は35
定数と変数 定数‧変数とは 定数‧変数…データを⼊れる箱のようなもの。データは何度でも使うこと ができる。 違い 定数:⼀度だけデータを⼊れられる 変数:何度でもデータを⼊れられる 補⾜:定数‧変数にデータを⼊れる処理を「代⼊」という。 number 10
定数と変数 定数‧変数の命名規則 定数‧変数は任意の名前をつけることができますが、慣習として以下の ルールがあります。 ルール1:⽇本語は使わない ×namae(名前) ×nennrei(年齢) ルール2:名前の先頭を⼩⽂字のアルファベットにする ×Name ×1name ◦name ルール3:複数の単語を組み合わせる場合、2単語⽬以降の先頭を⼤⽂字にする
(ローワーキャメルケース) ◦myName ◦hogeData
定数と変数 定数を宣⾔してみましょう let greeting : String = "Hello akarenga" print(greeting)
letは定数であることを⽰し、その後定 数の名前、型、=、データの順に記述 していきます。
定数と変数 再度定数にデータを代⼊するとどうな るでしょうか。以下のコードを追記し てください。 greeting = "Hello Swift" print(greeting) このようにletは⼀度しか代⼊できませ
ん。
定数と変数 ではletをvarに書き換えて定数から変 数にしてみるとどうでしょう。 let greeting … ↓ var greeting …
変数は何度もデータを⼊れられるので エラーになりません。
定数と変数 次に定数に整数を代⼊して、⽂字列と 連結して表⽰してみましょう。 let number : Int = 100 print(greeting
+ " " + String(number + 30)) Intは整数を表す英単語(Integer)の略で す。
定数と変数 【おまけ】型推論 Swiftには代⼊したデータの型によってその変数の型を決定する機能があります。 例1 型推論を使ったInt型の定数の宣⾔ :let number = 10 例2
型推論を使ったString型の変数の宣⾔ :var name = "⾚煉⽡太郎" 注意する点として、型推論は最初に代⼊したデータとは異なる型のデータを代⼊す るとエラーになります。 例:var age = 20 (この時点では変数ageはInt型) → age = "⾚煉⽡太郎" (String型の データを代⼊するとエラー)
if⽂/for-in⽂ if⽂ if⽂を使うことで条件に合わせて処理を変えることができます。 if 条件式 { //ここに条件式が成⽴した場合の処理を書く }
if⽂/for-in⽂ 変数nameに⽂字列を代⼊してその⽂字列 が"Swift"であれば"Hello Swift"を表⽰してみ ましょう var name : String =
"Swift" if name == "Swift" { print("Hello Swift") } 変数nameにSwift以外の⽂字列を代⼊した ら"Hello Swift"と表⽰されないと思います。
if⽂/for-in⽂ 条件に合わせて処理が変わったでしょうか? では次に⻘字の部分を追記してください。 var name : String = "Swift" if
name == "Swift" { print("Hello Swift") }else if name == "Python"{ print("Hello Python") }else { print("Hello World") } if⽂の後にelse ifで条件の追加、elseでそれ以 外の条件だった場合の処理を追加できます。
if⽂/for-in⽂ if⽂の条件式では2つの値の⼤⼩ を⽐較するときに右表のような⽐ 較演算⼦が利⽤できます。 例 let a : Int =
5 let b : Int = 10 if a < b { print("bはaより⼤きい") } //"bはaより⼤きい" 演算⼦ 数学での 記号 式の例 式の例の 意味 == = a==b aはbと等 しい != ≠ a!=b aはbと等 しくない > > a>b aはbより 大きい >= ≧ a>=b aはb以上 < < a<b aはbより 小さい <= ≦ a<=b aはb以下
if⽂/for-in⽂ for-in⽂ for-in⽂は同じ処理を繰り返すときに使われます。同じ⽂字列を100回表 ⽰するとか...。 for ループ変数 in 繰り返す範囲 { //ここに繰り返す処理を書く
} ループ変数とはこのfor-in⽂の中だけで使える変数であり、慣習的にiやj などが使われます。ループ変数が必要ない場合は_を使います。
if⽂/for-in⽂ for-in⽂を書いていきます。if⽂を削除して以 下を記述してください。 for _ in 0 ..< 5 {
print("Hello Swift") } 繰り返し範囲は0..<5になります。これは「0 から5の1つ前まで」を表しています。つまり 実際の繰り返し範囲は0から4までとなり5回 繰り返していることになります。0..<5の5を 10に変えてみると⽂字列は何回表⽰されるで しょうか。
if⽂/for-in⽂ 次にfor-in⽂がどのように繰り返しているの か確認してみましょう。⻘⾊の部分を書き換 え、追記してください。 for i in 0 ..< 5
{ print("Hello Swift" + String(i)) } for-in⽂の開始時にiには繰り返しの開始値(こ こだと0)が代⼊され、処理が終わるとiは繰り 返し範囲の次の値に更新(この場合はi+1)さ れ、for⽂内の処理が再び実⾏されます。
配列 配列とは1つの変数に複数の値が格納されたデータ形式となりま す。 let 配列名 : [型] = [値1,値2,値3, ………]
var 配列名 : [型] = [値1,値2,値3, ………] 定数‧変数と同様にletの場合は要素(配列に格納されたデータ)の 変更ができず、varの場合は要素の変更が可能です。
配列 配列の宣⾔、初期化、要素へアクセスしてみ ましょう。以下を記述してください。 let array : [Int] = [1,3,5,7,9] print(array[0])
print(array[4]) 配列の要素は0,1,2,3…のように0から数え始 めます。そのためprint(array[0])は配列array の0番⽬を表⽰しています。
配列 for-in⽂と組み合わせて配列の中⾝を全て表 ⽰してみましょう。print⽂を削除して以下を 追記してください。 for i in array { print(i)
} 繰り返す範囲に配列を渡すことで、その配列 の要素数だけループを繰り返します。今回の 場合、配列arrayの要素数は5なので5回ルー プを繰り返しています。
関数 関数とは特定の処理を実⾏するためのコードの集まりです。 関数は引数の型、戻り値の型で構成されています。引数は複数指定する ことができます。 func 関数名(引数名 : 型) -> 戻り値の型
{ //実⾏する処理の記述 } 関数によっては引数が無い関数や戻り値のない関数があります。
関数 まずは引数と返り値のない⽂字列を表⽰する だけの関数を宣⾔してみましょう。 func dispMessage(){ print("Hello Swift") print("Hello akarenga") }
dispMessage() 関数を使⽤する時は 関数名(引数) と書きま す。
関数 次に引数に整数型のデータを渡して、2乗を返 す関数を宣⾔します。以下を追記してくださ い。 func calcSquared(number: Int) -> Int {
return number * number } print(calcSquared(number:3)) calcSquared(number:3)はInt型の引数number に3を代⼊しています。return で計算結果を返 します。その後返ってきた値を表⽰します。
構造体とクラス 構造体とは 変数や定数、関数を⼀つのグループにした物です。この構造体の中で宣 ⾔した変数や定数はプロパティと呼ばれ、定義した関数はメソッドと呼 ばれます。 struct 構造体名 { プロパティの宣⾔ メソッドの定義
}
構造体とクラス 構造体を使う時 構造体を使う時は構造体のインスタンスを⽣成します。構造体を宣⾔し たままでは、いわゆる設計図のような状態です。インスタンスを⽣成す ることでPCのメモリ上にデータとして構造体を実体化します。 var 変数名 = 構造体名()
構造体とクラス では、⼈の名前と年齢を扱う構造体を作ってみ ましょう。 struct Person{ var name : String =
"福岡太郎" var age : Int = 20 } var p1 = Person() print(p1.name) インスタンスp1がもつnameプロパティを出⼒ しています。プロパティへのアクセスはインス タンス.プロパティ名と記述します。
構造体とクラス 名前を表⽰するメソッドを追加して呼び出して みましょう。 struct Person{ … func dispName(){ print(name) }
} var p1 = Person() p1.dispName()
構造体とクラス クラスとは クラスは構造体と同様にプロパティやメソッドをまとめた設計図のよう なものです。違いとしてクラスは参照型であることと継承することがで きることです。 参照型 … 複数の変数で⼀つのインスタンスの値を共有できる。構造体 は値型といって複数の変数で⼀つのインスタンスの値を共有できない。 継承
…クラスは他のクラスからメソッドやプロパティを継承して呼び出 すことができます。継承するクラスのことをサブクラス、継承されるク ラスのことをスーパークラスといいます。 継承を解説するのは時間的に 厳しそう...。インスタンスの値の 共有だけやってみます。
構造体とクラス インスタンスの値の共有をしてみましょう。⻘ 字の部分を書き換え、追記してください。 class Person{ … } var p1 =
Person() var p2 = p1 p1.name = "⾚煉⽡太郎" p2.dispName() p1のnameを書き換えたのに、p2も書き変わっ てます。
構造体とクラス 構造体の場合、nameプロパティを 書き換えたらどうなるのか調査して みました。 p2のnameプロパティを表⽰してみ たら書き換えられていませんでし た。 このことから、値型である構造型は 複数の変数で⼀つのインスタンスは 共有できないことがわかりました。
第1回は以上です!お疲れ様でした! 次回は1⽉23⽇を予定しています。