Skip to content

サンプル集

このセクションでは、Onionプログラミング言語のさまざまな機能とプログラミングパターンを示す、実践的なサンプルプログラムを紹介します。

サンプルプログラム

すべてのサンプルはOnionリポジトリの run/ ディレクトリにあります。

基本的なプログラム

オブジェクト指向の例

関数型プログラミング

実用的なユースケース

サンプルの実行

スクリプトランナーを使う

cd run
onion Hello.on

コンパイルして実行する

onionc Hello.on
java Hello

サンプル一覧

ファイル 説明 扱っているトピック
Hello.on Hello World 基本的な入出力
Array.on 配列操作 配列、ループ
StringCat.on 文字列の連結 文字列、配列
ReadLine.on ユーザー入力 入出力、文字列
List.on 動的リスト ArrayList、<< 演算子
Foreach.on Foreachループ イテレーション、コレクション
Select.on パターンマッチング select式
LineFilter.on ラムダによるフィルタリング ラムダ、クロージャ
LineCounter.on ファイル処理 再帰、入出力
Factorial.on 再帰 再帰関数
Primes.on エラトステネスの篩と素因数分解 真偽値配列、for/whileループ
Delegation.on 委譲パターン インターフェース、forward
Calculator.on GUI電卓 Swing、イベント処理
Bean.on JavaBeanパターン シリアライズ、getter/setter
OrderReport.on より大きなデータパイプライン レコード、enum、コレクションパイプライン
DeptReport.on CSVのグループ集計パイプライン Csv、レコード、Maps::groupBy、Stats
ExprEval.on 式評価器 インターフェース、多態性
AdtExpr.on 式評価器(ADT enumとして実装) enumcase、select、網羅性検査
StatsApp.on 統計処理 ジェネリクス、拡張メソッド
TodoManager.on タスク管理 レコード、enum、拡張メソッド
ShapeProcessor.on 図形ジオメトリ 継承、拡張メソッド
TextAnalyzer.on テキスト統計 文字列/リストの拡張メソッド
WordStats.on 単語頻度のテキスト統計 文字列、Maps::countBy、レコード
LogSummary.on shape-firstなログ分析 record ... from re"..."Maps::countBy
ConfigApp.on CLI + 設定ファイル 引数、YAML、derive!(Yaml)
JsonApiClient.on JSON + HTTPクライアント Http、Json、レコード
AsyncDownloader.on 並行Future Future、do記法
ShellPipeline.on シェルプロセスのパイプライン Proc、ファイル入出力
ResultValidation.on エラーを伴う検証 Option、Result
StaticImports.on 静的メソッドのインポート import { Class::method }
UnitConverter.on CLI単位変換ツール 拡張メソッド、Args
SetOperations.on 集合演算 onion.Sets(和集合、積集合、差集合)
PrimitivePredicate.on プリミティブ述語によるフィルタリング java.util.function.Predicate[Int]removeIf
PrimitiveFunctionalInterfaces.on プリミティブ型のJava関数型インターフェース プリミティブ型引数を持つ PredicateSupplierFunction
SortWithPrimitiveComparator.on プリミティブ比較器によるソート java.util.Comparator[Int]、プリミティブなラムダのブリッジ
CollectionUtilities.on Map/listのユーティリティ onion.Mapsonion.Iterables、カスタムソート
FizzBuzz.on 定番のFizzBuzz ループ、剰余、条件分岐
Fibonacci.on 再帰版と反復版のフィボナッチ数列 再帰、ループ、Timing
DataClass.on レコードの equals/hashCode/copy デモ レコード、toStringcopy
Bidirectional.on あらゆる方向に変換できる1つのレコード from re"..."derive!(Json, Yaml)example
CsvProcessor.on CSVヘッダの解析と集計 Csv::parseWithHeader
CliArgsDemo.on 手動のCLI引数解析 onion.Args
FileWordCounter.on ファイルからの単語数カウント ファイル入出力、BufferedReader
Generics.on ジェネリックなBoxクラス ジェネリッククラス、型パラメータ
PairSample.on ジェネリックなPairクラス ジェネリッククラス、複数の型パラメータ
Extension.on 組み込み型への拡張メソッド extension ブロック
NullSafety.on Nullable型と安全なナビゲーション T??. safe call演算子
ValVarInference.on val/var の型推論 ローカル型推論、可変/不変
PrimitivePrint.on プリミティブ値の出力 IO::println/IO::print
FunctionTypesSample.on 関数型パラメータ 関数型、ラムダ
JavaCollectionsSample.on Javaコレクションとの相互運用 java.util.ArrayListCollections
JavaGenerics.on Javaジェネリクスとの相互運用 java.util.ArrayList[String]
GuessNumber.on 数当てゲーム BufferedReader、制御フロー
TodoApp.on 対話型CLI ToDoリスト ArrayList、コンソール入出力
HttpJsonClient.on HTTP + JSONクライアント onion.Http
RegexLogParser.on ログ行の解析 re"..." 正規表現によるselectパターン
RecordLaws.on レコードの law/example lawexample、コンパイル時検査
SchemePrefix.on ユーザー定義スキームプレフィックス文字列 prefix"..." raw文字列リテラル
ShapeFirst.on shape-firstスクリプティングのツアー re"..."、pipeline、do記法、auto-CLI
FixedWidthDemo.on ユーザー定義の Shape インスタンス onion.Shape、Outcome/Defect、law
JsonYamlShapeDemo.on レコードに対する名前付きJSON/YAML shape shape name = json/yaml
ConfigEditDemo.on ロスレスな設定編集 Lens、Residue、コメント/順序の保持
BrokenLogDemo.on 部分的な失敗を許容するログ解析 onion.ShapeOutcome::values/defects
ToolDemo.on tool 宣言から生成されるCLI tool、capability、--help/--contract/--plan

学習の道のり

初級

  1. Hello.on から始める - 基本構文
  2. Array.on を試す - データ構造
  3. Foreach.on を試す - イテレーション

中級

  1. Factorial.on を学ぶ - 再帰
  2. LineFilter.on を学ぶ - ラムダ
  3. Bean.on を復習する - OOPパターン
  4. UnitConverter.on を試す - 拡張メソッドとCLI引数

上級

  1. Calculator.on を分析する - GUIプログラミング
  2. Delegation.on を理解する - デザインパターン
  3. LineCounter.on を調べる - ファイル処理

実践

  1. ConfigApp.on - CLI駆動の設定ローダーを構築する
  2. JsonApiClient.on - JSONを解析しHTTP APIを呼び出す
  3. AsyncDownloader.on - タスクを並行実行する
  4. ShellPipeline.on - シェルコマンドをオーケストレーションする
  5. ResultValidation.on - 関数型スタイルでエラーを処理する

次のステップ