Skip to content

基本構文

このガイドでは、Onionプログラミング言語の基本的な構文要素を説明します。

コメント

Onionは現在、C言語スタイルのコメントをサポートしています:

// 単一行コメント

/*
 * 複数行コメント
 * 複数行にまたがります
 */

変数

変数宣言

変数はval(不変)またはvar(可変)で宣言します。ローカル宣言では初期化子がある場合、型を省略できます:

val name = "Alice"
var count = 0
val age: Int = 30
val price: Double = 19.99
val isActive: Boolean = true

命名規則

  • 変数名はキャメルケース: firstName, totalCount
  • クラス名はパスカルケース: Person, Calculator
  • フィールドはthis.fieldでアクセス

プリミティブ型

Onionは標準的なJVMプリミティブ型をサポートします:

説明
Int 32ビット整数 42
Long 64ビット整数 42L
Double 64ビット浮動小数点 3.14
Float 32ビット浮動小数点 3.14f
Boolean true または false true, false
Char 単一文字 'A'
Byte 8ビット整数 127
Short 16ビット整数 1000

リテラル

文字列リテラル

val greeting: String = "Hello, World!"
val multiline: String = "Line 1\nLine 2\nLine 3"
val withQuotes: String = "She said \"Hello\""

数値リテラル

val decimal: Int = 42
val hex: Int = 0xFF
val longValue: Long = 100L
val doubleValue: Double = 3.14
val floatValue: Float = 2.5f       // f/F で Float、d/D で Double(大文字・小文字どちらも可)
val scientific: Double = 1.23e10

演算子

算術演算子

val a: Int = 10
val b: Int = 3

val sum: Int = a + b        // 13
val diff: Int = a - b       // 7
val product: Int = a * b    // 30
val quotient: Int = a / b   // 3
val remainder: Int = a % b  // 1

比較演算子

val x: Int = 5
val y: Int = 10

x == y  // false(等しい)
x != y  // true(等しくない)
x < y   // true(より小さい)
x > y   // false(より大きい)
x <= y  // true(以下)
x >= y  // false(以上)

論理演算子

val a: Boolean = true
val b: Boolean = false

a && b  // false(論理積)
a || b  // true(論理和)
!a      // false(論理否定)

型キャスト演算子

asキーワードで型キャストを行います。メソッドチェインの場合は括弧が必要です:

val x: Double = 3.14
val y: Int = x as Int  // Intにキャスト (3)

val random: Double = Math::random()
val randomInt: Int = (random * 100) as Int

// メソッドチェインの場合は括弧が必要
val btn: Object = getButton()
val text: String = (btn as JButton).getText()

リスト追加演算子

<<演算子でリストに追加します:

import { java.util.ArrayList; }

val list: ArrayList[String] = new ArrayList[String]()
list << "最初"
list << "2番目"
list << "3番目"

配列

配列宣言

// サイズ指定で配列を作成
val numbers: Int[] = new Int[10]

// 要素の初期化
val colors: String[] = new String[3]
colors[0] = "赤"
colors[1] = "緑"
colors[2] = "青"

配列アクセス

val fruits: String[] = new String[3]
fruits[0] = "りんご"
fruits[1] = "バナナ"
fruits[2] = "オレンジ"

val first: String = fruits[0]     // "りんご"
val second: String = fruits[1]    // "バナナ"

fruits[2] = "ぶどう"  // 要素の変更

val length: Int = fruits.length  // 配列の長さ

スコープと可視性

ローカル変数

メソッドやブロック内で宣言された変数は、そのスコープ内でのみ有効:

def method {
  val local: Int = 10
  // localはここでのみ有効
}

フィールド

フィールドはval/varで宣言し、this.fieldでアクセス:

class Example {
  var count: Int
  val name: String = "default"

  public:
    def increment {
      this.count = this.count + 1
    }
}

アクセス修飾子

デフォルトではメンバーはprivateです。public:で公開メンバーをマーク:

class Person {
  val ssn: String = "000-00-0000"  // デフォルトでprivate

  public:
    val name: String = "Alice"  // public

    def getName: String = this.name  // publicメソッド
}

インターフェース

インターフェースは本体を持たないメソッドシグネチャを宣言します。インターフェース全体を1行で書くことができ、本体のないメソッドの直後に閉じ } を同じ行に置くこともできます:

interface Shape { def area(): Double }

class Circle : Object <: Shape {
  val r: Double
public:
  def this(r: Double) { this.r = r }
  override def area(): Double = 3.14 * this.r * this.r
}

val s: Shape = new Circle(2.0)
println(s.area())   // 12.56

モジュールシステム

Import文

JavaクラスをOnionコードで使用するためにインポート。エイリアスも使用可能:

import {
  java.util.ArrayList;
  java.util.HashMap;
  java.io.File;
  java.lang.Long as JLong;
}

val list: ArrayList[String] = new ArrayList[String]()
val map: HashMap[String, String] = new HashMap[String, String]()
val file: File = new File("data.txt")
val str: String = JLong::toString(42L)

完全修飾名

インポートなしでも完全修飾名を使用できます:

val list: java.util.ArrayList[String] = new java.util.ArrayList[String]()

次のステップ