プログラミング実践講座:Java・Python・Rustで初心者を卒業する学習地図
Java・Python・Rustを、文法の入門から小さなアプリを自分で改修できる段階まで学ぶ講座です。各言語20回の本文と各目次、この記事を合わせて64記事あります。 まず一つを最後まで プログラミング自体が初めてなら、短いコードで結果を確かめやすいPython編から始める順を提案します。Javaを使う予定があるならJavaからで構いません。Rustを目的に
20 件の記事
Java・Python・Rustを、文法の入門から小さなアプリを自分で改修できる段階まで学ぶ講座です。各言語20回の本文と各目次、この記事を合わせて64記事あります。 まず一つを最後まで プログラミング自体が初めてなら、短いコードで結果を確かめやすいPython編から始める順を提案します。Javaを使う予定があるならJavaからで構いません。Rustを目的に
Pythonを初めて触る段階から、小さなアプリを設計・テスト・保存・配布できる段階へ進む全20回の講座です。各回には目的、実行例、結果の読み方、練習と解答、公式資料があります。 この講座の前提 Python 3.11以降と専用の仮想環境を使います。通常の例はmain.pyとして保存して実行します。第05回と第17〜19回は複数ファイルです。標準ライブラリ中心
この回では、動くコードへ要求を追加し、壊していないことを証明します。前提は第19回までです。 卒業課題 タスクにカテゴリを追加し、カテゴリ別の未完了件数を表示するstatsコマンドを作ってください。カテゴリの未指定はgeneralとします。空の一覧でもエラーにせず、件数が0であることが伝わる出力にします。旧バージョン1のJSONも読み、カテゴリを補って新形式
到達点は、別の環境でもインストールと検証ができる状態にすることです。前提は第17・18回です。 利用者のデータを使わず検証する 同じフォルダへtesttasks.pyを保存します。 コードブロック。 python -m unittest -v testtasks で二つのテストが成功します。途中のエラー表示は、失敗ケースを意図的に試したものです。テスト全体の
第17回のdomain.pyと同じフォルダにtasks.pyを作ります。保存失敗を成功に見せず、破損データを空として扱わない設計を実装します。 コードブロック。 python tasks.py add "Pythonを復習"、python tasks.py done 1、python tasks.py list の順で実行すると、ID1が完了状態で表示されま
ここから第19回で、JSONへ保存できるタスク管理CLIを作ります。前提は第01〜16回です。操作はadd、list、doneです。 型注釈の先にある検証 タスクは正の整数ID、1〜200コードポイントの題名、真偽の完了状態を持ちます。題名の前後の空白を除き、改行とタブは認めません。doneを二度実行しても完了状態を保ち、存在しないIDはエラーとします。同時
到達点は、問題のある場所を測り、入力の境界で不正な値を止めることです。前提は第11〜15回です。 最適化の前に処理量を確認する 遅いからといって、すぐに並列化する必要はありません。全件比較を辞書検索へ変えるだけで、処理量が大幅に減る場合があります。cProfileで関数ごとの時間を調べ、timeitで小さな処理を繰り返し比較します。計測前後で入力と実行環境を
到達点は、共通処理を関数へ付け加え、資源の利用範囲を明示することです。前提は第06・09回です。 関数も値として渡せる デコレータは関数を受け取り、別の関数などを返して振る舞いを包みます。ログや計測に便利ですが、何が起きるか読めないほど重ねると保守が難しくなります。まず手動で包む処理を理解します。 コードブロック。 main.pyでは、集計へ入る、total
到達点は、待ち時間と計算時間を分け、並行処理の方法を選ぶことです。前提は第09・13回です。TaskGroupの例にはPython 3.11以降を使います。 awaitは待ちを他の仕事へ譲る async defで定義した関数を呼ぶとコルーチンができます。呼んだだけでは通常、処理は最後まで進みません。イベントループで実行し、awaitで他の仕事へ進む機会を渡し
到達点は、通信期限、ステータス、本文、型を順に確認することです。前提は第07・10回です。 ネットワークには部分的な失敗がある 接続できない場合、接続できたがエラー応答の場合、成功応答だが本文が不正な場合は別です。すべてを「データなし」と扱うと障害に気付けません。次の例は外部サービスなしで、ローカルのJSON応答を確認します。 コードブロック。 main.p
到達点は、SQLの値を安全に渡し、失敗した更新を取り消すことです。前提は第06・11回です。 検索できる形で保存する SQLiteは単一ファイルなどにデータを保存できるデータベースです。Python標準ライブラリのsqlite3から使えます。テーブルに型や制約を定義し、SELECTで取得、INSERTで追加、UPDATEで変更、DELETEで削除します。 コ
到達点は、正常系だけでなく境界と失敗を再現するテストを書くことです。前提は第06・10回です。 期待結果は仕様から選ぶ テストは実装をなぞるためでなく、利用者との契約を守るために書きます。「5000円以上なら送料無料」なら、4999と5000が重要です。実装と同じ式で期待値を計算すると、同じ誤りを見逃す場合があります。 次をtestfees.pyに保存します
到達点は、型注釈を実行時検査と混同せず、関数の契約を示すことです。前提は第05・08回です。 型は読み手と検査道具への情報 引数と戻り値へ型を付けると、関数が何を受け取り何を返すかが分かります。mypyなどの静的型チェッカーは実行前に矛盾を探します。一方、JSONやユーザー入力の正しさは、実行時に別途検査する必要があります。 コードブロック。 main.py
到達点は、全件を保持せずに処理する流れを作ることです。前提は第04・07回です。 必要になるまで作らない イテラブルはforで順に取り出せるもの、イテレータはその取り出し位置を持つものです。ジェネレータ関数はyieldで一つずつ値を返し、次に求められるまで処理を中断します。 コードブロック。 main.pyで実行すると25、45、空のリスト、0・1・4・9・
到達点は、関連するデータとルールをまとめ、共有してよいものを区別することです。前提は第03・06回です。 クラスは状態と操作の単位 selfは操作対象のインスタンスです。各インスタンスの状態はselfに保存し、クラス属性として可変リストを置くと全インスタンスで共有される点に注意します。データを運ぶ型にはdataclassを使うと、初期化や比較の定型処理を減ら
到達点は、データ形式と文字コードを明示して読み書きすることです。前提は第06回です。 データ形式には文法がある JSONは辞書や配列などの構造、CSVは表形式のデータに使えます。CSVを単にカンマでsplitすると、引用符で囲んだカンマを壊します。自分で区切り規則を推測せず、形式に対応したライブラリを使います。 コードブロック。 main.pyの出力は25、
到達点は、想定内の入力エラーと予期しない不具合を分けることです。前提は第05回です。 捕まえる範囲を狭くする tryには失敗する可能性のある操作を置き、exceptには対処を置きます。どんな例外でも成功扱いにすると、プログラムの間違いまで隠します。数値変換ならValueError、ファイルがないならFileNotFoundErrorなど、対処できる種類を選び
到達点は、複数ファイルへ分けても実行手順を再現できることです。前提は第03回です。 importはファイルの貼り付けではない 一つのPythonファイルをモジュールとして扱えます。import時にはモジュールのトップレベルの処理が実行されます。読み込みだけで入力待ちやファイル更新が始まると、テストや再利用が困難になります。実行の入口はmain関数へ集めましょ
到達点は、データの関係に合う入れ物を選ぶことです。前提は第03回です。 順番、対応、重複を分ける listは順番を持つ列、dictはキーから値への対応、setは重複のない集合です。tupleは変更不能な列で、複数の値をまとめて返す用途にも使います。選択の基準は短く書けるかではなく、何を保存し何を検索したいかです。 コードブロック。 main.pyで実行すると
到達点は、入力、出力、許される範囲を決めて関数を書くことです。前提は第02回です。 関数に一つの判断を任せる 送料を求める関数なら、購入額を受け取り、送料を返すと決めます。表示や入力まで同じ関数に詰め込まなければ、別の画面やテストから再利用できます。defの後のインデントが関数の範囲です。 コードブロック。 main.pyとして実行すると、送料は500、50