投稿

11月, 2025の投稿を表示しています

12月1日(月)2コマ目

イメージ
今日、やったこと 列挙型 エラー処理 今日のホワイトボード 列挙型 以前にもちょっとだけ話をしたが、列挙型は定数のセット集のようなもの。 今回は、例外処理にからめて、Errorプロトコルを準拠した例外スロー用の列挙型を作った。 例外処理 これも以前にちょっとだけ話をした。 基本的にはJavaの例外処理と同じようなもの。以下がJavaと異なる。 try{ }ではなく、do{ } 例外クラスではなく、列挙型をスロー 例外スローメソッド呼び出し時は、キーワードtryが必要 例外をスローするメソッドはキーワードthrowsで例外スローを宣言   サンプル1 Errorプロトコルを準拠したDivError列挙型を作成。 DivError列挙型には、0除算時にスローするdivByZeroを追加。 わり算の分母が0なら、DivError.divByZoroをスロー。 サンプル1改造 DivError列挙型に、アンダーフロー発生時にスローするDivError.underFLowを追加。 わり算の分母が10,000以上ならDivError.underFLowをスロー。 サンプル2 わり算関数div()を作成。 分母が0なら、DivError.divByZeroをスロー。 このdiv()関数を呼び出す際には、キーワードtryが必要。 サンプル2改造 下図の計算のためのCalc構造体を作成。 図 Calc構造体 次回は 練習問題。

11月25日(火)3、4コマ目

イメージ
今日、やったこと SwiftUIでGUI作成 今日のホワイトボード SwiftでGUIアプリケーションを作成するには フレームワークが2種類用意されている。 図 GUIのために用意されているフレームワーク 今回はSwiftUIで作成。 ContentView.swiftについて 画面作成はContentView.swiftにて行う。 なんとなくやっていることはわかると思うが、よくよく見ると、謎が多い。 ContentView構造体をよみとく① VIewプロトコルを準拠。 bodyの型はViewプロトコルを準拠した何か(some)。 bodyはコンピューテッドプロパティ。 図 ContentView構造体とbodyプロパティ ContentView構造体をよみとく② bodyプロパティ bodyプロパティはいろいろと省略されている。 bodyプロパティはgetterのみ。 よって、 set { }は省略 get{ }も省略 さらに、getterの処理は値を返すだけなので、returnも省略。 VStack構造体のインスタンスを生成し、padding()関数の戻り値を返す。 図 bodyプロパティが返す値 ContentView構造体をよみとく③ VStack構造体のインスタンス生成 bodyプロパティのgetterにて、VStack構造体のインスタンスを生成している。 が、よく見ると今まで見てきたインスタンス生成と異なる。 VStack構造体のイニシャライザは引数が3つある。 第1、第2引数はデフォルト値あり -> 設定不要 第3引数はクロージャー式 イニシャライザの最後の引数がクロージャーなら、クロージャー式は( )内でなく、( )の外で...

11月21日(金)4コマ目

イメージ
今日、やったこと [練習問題 解説]練習問題9(クロージャー) 例外処理 今日のホワイトボード [練習問題 解説]練習問題9(クロージャー) 9-1 範囲演算子が便利。 9-2 いろいろと省略をしている。 最大値検索のクロージャー式では、 引数の型 戻り値の型 を省略。 最小値検索のクロージャー式では、引数の名前も省略。 9-3 9-4 3項演算子を使えばコンパクトにできる。 例外処理 基本的にはJavaの例外処理と同じ。 ただ、 スローされるのは例外クラスではなく、Errorプロトコルを準拠した列挙型(が多い) tryではなく、do 例外をスローする関数呼び出しの際はtryが必要 が異なる。 図 例外処理 また、例外をスローする関数は throws が必要。 図 例外をスローする関数 次回は 簡単なGUIを作成。

11月19日(水)3コマ目

今日、やったこと [練習問題 解説]練習問題8(タプル) クロージャー [練習問題]練習問題9(クロージャー) 今日のホワイトボード [練習問題 解説]練習問題8(タプル) 正解例をあげておきます。 8-1 8-2 キャンペーン名がOptional型。アンラップが必要。 今回はキャンペーン名がnilか、否かで処理内容が異なるため、ifを使ったオプショナルバインディングで対応。 クロージャー 無名関数のこと。 さらに、関数を変数に代入できる。 クロージャー式は省略記法がいろいろあるので注意。 特に最後の引数名を省略して、$でアクセスするあたりになると、何をやっているかわからなくなる。 次回は 練習問題9の続き+解説 

11月18日(火)3、4コマ目

イメージ
今日、やったこと [練習問題]練習問題6(エクステンション) [練習問題 解説]練習問題6(エクステンション) プロトコル <= なぜか動かず タプル [練習問題]練習問題8(タプル) 今日のホワイトボード [練習問題 解説]練習問題6(エクステンション) そんなにややこしくはなかったかと。 正解例をあげておきます。 6-1 6-2 6-3 6-4 6-5 エクステンションでイニシャライザを追加する際、 エクステンション元のイニシャライザをself.init()で呼び出し可能 。 プロトコル JavaやC#のインタフェースと同じイメージで。 JavaやC#でのインタフェースの実装は、プロトコルの準拠。 継承と同じ : を使う方法と、 extension を使う方法がある。 図 プロトコルの準拠 JavaやC#のインタフェースと同じで、プロトコル型の変数はそのプロトコルを準拠したクラスや構造体のインスタンスを扱うことができる。(いわゆる多態性=ポリモーフィズム) 図 プロトコルを使った多態性(ポリモーフィズム) が、すいませんが、サンプルがちゃんと動きませんでした。 タプル 型が異なる複数のデータをまとめて扱うことができる。 要素のアクセスはインデックス または 名前 でアクセスできる。 タプル利用のありがちパターンは関数の戻り値。 複数のデータをタプルでまとめて返すことができる。 受け取り側はタプルで受け取る。 図 関数の戻り値をタプルにして複数の値をまとめて返す 次回は 練習問題の続き。 クロージャー。

11月17日(月)3 コマ目

イメージ
今日、やったこと [練習問題]練習問題5(構造体) [練習問題 解説]練習問題5(構造体) エクステンション 今日のホワイトボード [練習問題 解説]練習問題5(構造体) 構造体の練習というより、nilとOptional型の復習。 正解例をあげておきます。 5-1 構造体を作って、配列を作るだけ。 5-2 nilか否かは != nil でできる。 ついつい、オプショナルバインディングとかを思い浮かべるが、そこまでしなくていい。 5-3 C言語由来の言語では、計算する2つの値の型が異なる場合、大きな型(double > int)に自動的にキャストされる。 Swiftでは、両方ともキャストが必要。 エクステンション クラスは継承で機能追加ができる。 継承が使えるのは、クラスだけ。 構造体、列挙型、プロトコル(=インターフェース)はエクステンションで機能追加。 図 継承とエクステンションのイメージ コンピューテッドプロパティの省略記法 メソッドにあった、 処理内容が値を返すだけなら、returnが省略できる に加えて、 コンピューテッドプロパティはget処理だけなら、get{ }が省略できる もある。 図 コンピューテッドプロパティの省略記法 以下のサンプルで確認しました。 実行結果 次回は エクステンションの練習問題。 

11月17日(月)2コマ目

イメージ
今日、やったこと 構造体 [練習問題]練習問題5 今日のホワイトボード 構造体は値型 クラス型変数は参照型。インスタンスへの参照情報が代入される。 構造体型変数は値型。インスタンスそのものが代入される。 図 クラス型変数は参照型、構造体型変数は値型 ⚪︎クラスの場合 図 dog1、dog2は同じインスタンスを参照するため、ageプロパティは同じ値になる 図 クラス型変数とインスタンスのメモリ上でのイメージ ⚪︎構造体の場合 図 dog1、dog2は異なるインスタンス dog2だけageプロパティが変更される 図 構造体型変数とインスタンスのメモリ上でのイメージ メソッドの省略記法 メソッドの処理が値を返すだけなら、returnは省略可。 図 メソッドの省略記法 メンバーワイズイニシャライザ プロパティを初期化するイニシャライザを明示的に作らなくても自動生成してくれる。 クラスではできない。 インスタンスメソッド内でプロパティを変更する場合 メソッドに  mutating  を指定する必要あり。 次回は 練習問題の解説。 エクステンション。  

11月7日(金)3、4コマ目

イメージ
今日、やったこと [練習問題 解説]練習問題3 クラス イニシャライザ プロパティ メソッド [練習問題]練習問題4 今日のホワイトボード [練習問題 解説]練習問題3 前回の続き。 3-5、3-6 max()の引数の配列の要素数が0ならnilを返すため、戻り値はOptional型。 max()関数の戻り値を使うには、アンラップが必要。 [クラス]イニシャライザ JavaやC#のコンストラクタ。 イニシャライザ内では、 まずプロパティの初期化 を行うこと。 図 イニシャライザ内の処理順序 [クラス]コンビニエンスイニシャライザ JavaやC#でできたコンストラクタのオーバーロードがSwiftではNG。 代わりにコンビニエンスイニシャライザがある。 コンビニエンスイニシャライザ内では、まず、 指定イニシャライザを実行 すること。 図 指定イニシャライザとコンビニエンスイニシャライザの関係 簡単なサンプルで確認。 インスタンス生成には new はいらない 。 [クラス]プロパティ 何に紐づくか(インスタンス?クラス?)、値を保持する(=Javaのフィールド)、値を保持しない(処理をする)かで分類ができる。 図 プロパティの分類 一見、ややこしそうに見えるが、何気に今までのフィールドやプロパティと同じ。 [クラス]メソッド メソッドもプロパティ同様、インスタンスに紐づくインスタンスメソッドと、クラスに紐づくタイプメソッドがある。 [クラス]タイプxxとクラスxxの違い 両方ともクラスに紐づく点は同じ。 違いはオーバーライドできるか、できないか。 タイプxxはサブクラスでオーバーライドできない。 クラスxxはサブクラスでオーバーライドできる。 [練習問題]練習問題4 クラスの問題。正解例をあげておきます。 4-1 4-2 次回は 構造体。  

11月5日(水)3コマ目

今日、やったこと [練習問題]練習問題3(nil、Optional型、アンラップ) [練習問題 解説]練習問題3  今日のホワイトボード [練習問題 解説]練習問題3 nil、Optional型、アンラップに関する問題。 3-1 単なる基数変換の問題。nilやOptional型はなし。 3-2 3-1を変換結果を返すように改造しただけ。これもnilやOptional型は関係なし。 3-3、3-4 3-3では、引数が範囲外ならnilを返すように改造。よって、戻り値はOptional型になる。 3-4では、関数の戻り値をアンラップして基数変換した結果を取得。 次回は 残り(3-5、3-6)の解説。 クラスをやります。