Yomiage
メニュー

#型と設計

18 件の記事

すべての記事
並び替えを変更 更新日時 / 降順
aiの歴史ai倫理ai法務g検定haskelljavajava実践講座pythonpython実践講座rustrust実践講座シフト演算ド・モルガンの法則プログラミングベン図人工知能代数公式過去問解説命題命題論理型と設計基数基数変換基本情報技術者基礎文法基礎理論学習ガイド学習ロードマップ実践技術応用情報技術者情報処理技術者試験数値表現数学数理統計機械学習浮動小数点深層学習真理値表社会実装算術演算総合演習補数試験対策誤差論理演算集合離散数学
投稿者: しゅりりん

Rust実践講座 10:クロージャとイテレータで変換する

到達点は、借用と所有権の違いを保ちながら、抽出と集計を書くことです。前提は第08・09回です。 取り出し方で所有関係が変わる Vecに対するiterは共有参照、itermutは可変参照、intoiterはVecを消費して所有する要素を取り出す使い方ができます。同じ「繰り返し」に見えても、元のデータを後で使えるかが違います。 コードブロック。 src/main

0 0 0 0
投稿者: しゅりりん

Rust実践講座 09:トレイト・ジェネリクス・動的ディスパッチ

到達点は、実装に依存せず操作の約束を表すことです。前提は第06・07回です。 操作の共通部分を名前にする トレイトは、型が提供する操作などの約束です。ジェネリクスにトレイト境界を付けると、どの型でもよいのではなく、必要な操作を持つ型だけを受け入れます。 コードブロック。 src/main.rsで学習の表示が二回、復習3件が一回出ます。ジェネリックなshowは

1 0 0 0
投稿者: しゅりりん

Rust実践講座 08:Vec・HashMap・StringとUTF-8

到達点は、可変長データと文字列を、所有権を意識して扱うことです。前提は第05〜07回です。 要素を増やすと場所が変わることがある Vecは連続領域に要素を持つ可変長配列です。pushで容量を超えると再確保が起きる場合があります。要素への参照を使っている最中にVecを変更できないケースがあるのは、参照先の移動を防ぐためです。 コードブロック。 src/main

1 0 0 0
投稿者: しゅりりん

Rust実践講座 07:Option・Result・疑問符で失敗を伝える

到達点は、不在、回復可能な失敗、プログラムの前提違反を区別することです。前提は第06回です。 失敗も戻り値の型へ含める OptionはSomeかNone、ResultはOkかErrです。検索で見つからないのは通常の不在、数値の読み取り失敗は理由のある失敗として表せます。unwrapは不在や失敗をpanicに変えるため、利用者の入力へ安易に使いません。 コード

1 0 0 0
投稿者: しゅりりん

Rust実践講座 06:struct・enum・matchで状態を表す

到達点は、不可能な状態を作りにくい型を設計することです。前提は第05回です。 データの組と選択肢 structは複数の項目をまとめ、enumは複数の状態のいずれかを表します。失敗したかどうかのboolと、成功データと、エラーメッセージを独立に持つと、意味のない組合せが生まれます。状態ごとに必要なデータを持たせると整理できます。 コードブロック。 src/ma

0 0 0 0
投稿者: しゅりりん

Rust実践講座 05:借用・スライス・ライフタイム

到達点は、所有せずに読む、独占して変更する、参照の有効期間を区別することです。前提は第04回です。 借りることで移動を避ける &T は共有参照、&mut T は可変参照です。通常の借用規則では、同じ対象に同時に使う複数の共有参照、または一つの可変参照を持ちます。共有参照と可変参照を衝突させないことで、読み取り中の予期しない変更を防ぎます。 コードブロック。

0 0 0 0
投稿者: しゅりりん

Python実践講座 10:型注釈とProtocolで境界を明確にする

到達点は、型注釈を実行時検査と混同せず、関数の契約を示すことです。前提は第05・08回です。 型は読み手と検査道具への情報 引数と戻り値へ型を付けると、関数が何を受け取り何を返すかが分かります。mypyなどの静的型チェッカーは実行前に矛盾を探します。一方、JSONやユーザー入力の正しさは、実行時に別途検査する必要があります。 コードブロック。 main.py

1 0 0 0
投稿者: しゅりりん

Python実践講座 09:イテレータとジェネレータで逐次処理する

到達点は、全件を保持せずに処理する流れを作ることです。前提は第04・07回です。 必要になるまで作らない イテラブルはforで順に取り出せるもの、イテレータはその取り出し位置を持つものです。ジェネレータ関数はyieldで一つずつ値を返し、次に求められるまで処理を中断します。 コードブロック。 main.pyで実行すると25、45、空のリスト、0・1・4・9・

1 0 0 0
投稿者: しゅりりん

Python実践講座 08:クラス・dataclass・合成

到達点は、関連するデータとルールをまとめ、共有してよいものを区別することです。前提は第03・06回です。 クラスは状態と操作の単位 selfは操作対象のインスタンスです。各インスタンスの状態はselfに保存し、クラス属性として可変リストを置くと全インスタンスで共有される点に注意します。データを運ぶ型にはdataclassを使うと、初期化や比較の定型処理を減ら

1 0 0 0
投稿者: しゅりりん

Python実践講座 07:Path・JSON・CSV・日時

到達点は、データ形式と文字コードを明示して読み書きすることです。前提は第06回です。 データ形式には文法がある JSONは辞書や配列などの構造、CSVは表形式のデータに使えます。CSVを単にカンマでsplitすると、引用符で囲んだカンマを壊します。自分で区切り規則を推測せず、形式に対応したライブラリを使います。 コードブロック。 main.pyの出力は25、

1 0 0 0
投稿者: しゅりりん

Python実践講座 06:例外と後始末を設計する

到達点は、想定内の入力エラーと予期しない不具合を分けることです。前提は第05回です。 捕まえる範囲を狭くする tryには失敗する可能性のある操作を置き、exceptには対処を置きます。どんな例外でも成功扱いにすると、プログラムの間違いまで隠します。数値変換ならValueError、ファイルがないならFileNotFoundErrorなど、対処できる種類を選び

1 0 0 0
投稿者: しゅりりん

Python実践講座 05:モジュール・パッケージ・依存管理

到達点は、複数ファイルへ分けても実行手順を再現できることです。前提は第03回です。 importはファイルの貼り付けではない 一つのPythonファイルをモジュールとして扱えます。import時にはモジュールのトップレベルの処理が実行されます。読み込みだけで入力待ちやファイル更新が始まると、テストや再利用が困難になります。実行の入口はmain関数へ集めましょ

1 0 0 0
投稿者: しゅりりん

Java実践講座 10:ファイル・文字コード・日時を扱う

到達点は、外部のデータを明示的な形式で読み書きすることです。前提は第08回です。 ファイルには文字コードが必要 ファイルの実体はバイト列です。文字列へ戻す規則が文字コードです。UTF-8を明示すると、別のマシンでも意図が伝わります。Pathは場所を表し、Filesが読み書きなどの操作を提供します。 コードブロック。 Main.javaで実行すると行数は2、時

1 0 0 0
投稿者: しゅりりん

Java実践講座 09:ラムダとStreamで変換の流れを表す

到達点は、抽出、変換、集計を分けて書くことです。前提は第07・08回です。 「どう回すか」から「何を求めるか」へ Streamはコレクションそのものではなく、要素を処理する流れです。filterで対象を絞り、mapで形を変え、sumやtoListなどの終端操作で結果を得ます。終端操作が呼ばれるまで、中間操作は原則として実行されません。 コードブロック。 Ma

1 0 0 0
投稿者: しゅりりん

Java実践講座 08:例外・Optional・リソース管理

到達点は、失敗の種類を分け、後始末を確実にすることです。前提は第07回です。 失敗を成功に見せない 「検索結果がない」「文字列を数値にできない」「ファイルを読めない」は違う状態です。通常の不在ならOptional、呼び出し規約の違反やI/O失敗なら例外が候補になります。例外を捕まえて空の結果を返すだけだと、障害と正常な0件を区別できなくなります。 コードブロ

2 0 0 0
投稿者: しゅりりん

Java実践講座 07:コレクション・ジェネリクス・計算量

到達点は、List、Set、Mapを目的に合わせて選ぶことです。前提は第06回です。 保存したい関係から選ぶ Listは順序と重複を持つ列、Setは重複しない集合、Mapはキーから値への対応です。記事を表示順に持つならList、既読IDを管理するならSet、IDから記事を探すならMapが候補です。 コードブロック。 Main.javaの出力は2、キー順でja

1 0 0 0
投稿者: しゅりりん

Java実践講座 06:インターフェースと合成で変更に備える

到達点は、実装を取り替えられる境界を作ることです。前提は第05回です。 呼ぶ側が必要とする約束 通知処理で必要なのは「メッセージを送れること」です。画面表示かメールかという実装の詳細まで、業務処理が知る必要はありません。インターフェースに操作の約束を置き、実装を外から渡します。これを依存性の注入と呼びます。大きなフレームワークは不要です。 コードブロック。

1 0 0 0
投稿者: しゅりりん

Java実践講座 05:クラスで状態とルールを一緒に守る

この回では、オブジェクト指向を「現実の物を何でもクラスにすること」ではなく、状態の整合性を守る方法として学びます。前提は第04回です。 不正な状態を作らせない 残高を公開変数にすると、どの場所からでも負の数へ書き換えられます。privateにして、入金という操作だけを公開すれば、検査を一か所に集められます。これがカプセル化の実用的な価値です。 コードブロック

1 0 0 0