プログラミング実践講座:Java・Python・Rustで初心者を卒業する学習地図
Java・Python・Rustを、文法の入門から小さなアプリを自分で改修できる段階まで学ぶ講座です。各言語20回の本文と各目次、この記事を合わせて64記事あります。 まず一つを最後まで プログラミング自体が初めてなら、短いコードで結果を確かめやすいPython編から始める順を提案します。Javaを使う予定があるならJavaからで構いません。Rustを目的に
20 件の記事
Java・Python・Rustを、文法の入門から小さなアプリを自分で改修できる段階まで学ぶ講座です。各言語20回の本文と各目次、この記事を合わせて64記事あります。 まず一つを最後まで プログラミング自体が初めてなら、短いコードで結果を確かめやすいPython編から始める順を提案します。Javaを使う予定があるならJavaからで構いません。Rustを目的に
Rustを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 Rust 2024 Editionに対応するRust 1.85以降のstableとCargoを使います。通常の例はsrc/main.rsへ保存します。依存が必要な回はCa
Pythonを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 Python 3.11以降と専用の仮想環境を使います。通常の例はmain.pyとして保存して実行します。第05回と第17〜19回は複数ファイルです。標準ライブラリ中心
Javaを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 JDK 21を基準にします。通常の例はMain.javaとして保存し、javacとjavaで動かせます。第11・12回はMaven、第17〜19回は複数ファイルのプロジェ
この回では、既存のCLIへ新しい要求を実装し、型、所有権、テストの選択を説明します。前提は第19回までです。 卒業課題 タスク管理CLIへ検索と並び替えを追加してください。検索は題名の部分一致とし、大文字・小文字を区別する仕様から始めます。未完了だけを表示でき、表示順をID順または題名順で選べるようにします。存在するタスクの所有権を不要に奪わず、表示用の選択
到達点は、保存を含む振る舞いを繰り返し検証し、実行物を渡せることです。前提は第17・18回です。 実際の保存境界を通す 次をsrc/main.rsの末尾へ追加します。既存のmainを置き換えず、テスト用モジュールを足してください。 コードブロック。 cargo testで二つのテストが成功します。tempdirでテストごとに別の領域を作り、終了時に片付けます
第17回のプロジェクトのCargo.tomlを次にします。tempfileは一時ファイルを安全に作り、保存先へ置き換えるために使います。 コードブロック。 src/main.rsを次にします。src/task.rsは前回のものを使います。 コードブロック。 cargo run -- tasks.json add "Rustを復習"、cargo run --
ここから保存できるタスク管理CLIを作ります。前提は第01〜16回です。Java・Python編と同じadd、list、doneを、RustのResultと所有権で実装します。 契約を先に決める IDは正のu64、題名は前後の空白を除いた1〜200 Unicodeスカラー値、完了状態はboolです。改行とタブは認めません。未完了を完了にし、すでに完了でも成功
到達点は、非同期処理を動かす仕組みと、待ちを制限する場所を理解することです。前提は第07・15回です。 Futureだけでは進まない async関数はFutureを作り、実行を進めるにはポーリングするランタイムが必要です。awaitは待ちが必要なときに他の仕事へ進む機会を与えます。ここではTokioを使い、ローカルのTCP通信を一往復させます。 新しいプロジ
到達点は、データを渡す方法と共有する方法を選び、完了を待つことです。前提は第14回です。 共有しないことで単純にする 別スレッドへ仕事を渡し、結果だけをチャネルで戻すと、共有状態への同時更新を減らせます。moveクロージャは必要な所有物をスレッドへ渡すためによく使います。 コードブロック。 src/main.rsで120と1が表示されます。結果が届く順番は保
到達点は、共有や内部変更が必要な理由を説明して型を選ぶことです。前提は第05・09回です。 所有権の道具を目的で選ぶ Boxはヒープ上の値を単独所有する道具、Rcは単一スレッドで参照カウントにより共有所有する道具です。RefCellは借用規則の一部を実行時に確認し、共有参照の内側から変更する「内部可変性」を提供します。 コードブロック。 src/main.r
到達点は、外部データを型へ変換した後も、値の妥当性を調べることです。前提は第07・11回です。 文法、型、業務ルールの三段階 JSONの文法が正しくても、必要な項目があるとは限りません。型が合っていても、学習時間が一日を超えるなど業務上の不正があり得ます。Serdeはシリアライズとデシリアライズを支援しますが、アプリ独自のルールまですべて自動で知っているわけ
到達点は、型チェックでは分からない業務ルールをテストすることです。前提は第07・11回です。 コンパイル成功は仕様の正しさではない Rustは多くのメモリ上の誤りをコンパイル時に防ぎますが、送料無料の境界を5001円にしても型としては正しいままです。具体的な入力と期待結果をテストへ記録します。 cargo new test-practice --lib --
到達点は、公開するAPIと内部実装を分けることです。前提は第09回です。 ファイルと名前空間を対応させる クレートはコンパイルの単位で、ライブラリにも実行プログラムにもなります。パッケージはCargo.tomlで管理され、複数のクレートを含む場合があります。モジュールはクレート内の名前空間と公開範囲を整理します。 cargo new module-pract
到達点は、借用と所有権の違いを保ちながら、抽出と集計を書くことです。前提は第08・09回です。 取り出し方で所有関係が変わる Vecに対するiterは共有参照、itermutは可変参照、intoiterはVecを消費して所有する要素を取り出す使い方ができます。同じ「繰り返し」に見えても、元のデータを後で使えるかが違います。 コードブロック。 src/main
到達点は、実装に依存せず操作の約束を表すことです。前提は第06・07回です。 操作の共通部分を名前にする トレイトは、型が提供する操作などの約束です。ジェネリクスにトレイト境界を付けると、どの型でもよいのではなく、必要な操作を持つ型だけを受け入れます。 コードブロック。 src/main.rsで学習の表示が二回、復習3件が一回出ます。ジェネリックなshowは
到達点は、可変長データと文字列を、所有権を意識して扱うことです。前提は第05〜07回です。 要素を増やすと場所が変わることがある Vecは連続領域に要素を持つ可変長配列です。pushで容量を超えると再確保が起きる場合があります。要素への参照を使っている最中にVecを変更できないケースがあるのは、参照先の移動を防ぐためです。 コードブロック。 src/main
到達点は、不在、回復可能な失敗、プログラムの前提違反を区別することです。前提は第06回です。 失敗も戻り値の型へ含める OptionはSomeかNone、ResultはOkかErrです。検索で見つからないのは通常の不在、数値の読み取り失敗は理由のある失敗として表せます。unwrapは不在や失敗をpanicに変えるため、利用者の入力へ安易に使いません。 コード
到達点は、不可能な状態を作りにくい型を設計することです。前提は第05回です。 データの組と選択肢 structは複数の項目をまとめ、enumは複数の状態のいずれかを表します。失敗したかどうかのboolと、成功データと、エラーメッセージを独立に持つと、意味のない組合せが生まれます。状態ごとに必要なデータを持たせると整理できます。 コードブロック。 src/ma
到達点は、所有せずに読む、独占して変更する、参照の有効期間を区別することです。前提は第04回です。 借りることで移動を避ける &T は共有参照、&mut T は可変参照です。通常の借用規則では、同じ対象に同時に使う複数の共有参照、または一つの可変参照を持ちます。共有参照と可変参照を衝突させないことで、読み取り中の予期しない変更を防ぎます。 コードブロック。