SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新開発言語「Scala」の実体

Javaの限界を超えて実用化を目指す
新開発言語「Scala」のメリットとは~前編

キーワードは手軽さと拡張性

対話型評価環境(REPL)

 まずは、Scalaの対話型評価環境(REPL、Read-eval-print loop)を試してみましょう。対話型評価環境では、ほぼすべてのScalaの機能をコンパイルすることなく試すことができます。なお、REPLは1文ごとに自動で型を表示してくれるので、参考にしてください。REPLはコマンドプロンプトで「scala」とタイプすると起動し、「exit」とタイプすると終了します。

REPLの画面
REPLの画面

 ここからしばらくの間は、このREPLを使って解説していきます。コマンドラインかターミナル上で、「scala」とタイプしてREPLモードに遷移してください。

Scalaの基本文法

 Scalaは、オブジェクト指向が徹底されています。そのため、リテラルも変数も関数も、値を返すオブジェクトです。そして、ifやforなどの制御構造も値を返します。制御構造は、JavaやC言語ユーザーにとって違和感のない表記法が採用されています。表2は、リテラルとコメントの一覧です。ヒアドキュメントで記述すると、エスケープ文字や改行を、そのまま書くことができます。なお、scaladocとはjavadocと同じで、ソースコード中のscaladocコメントから、ドキュメントを生成するためのコメント形式です。

表2:リテラルとコメントの一覧
数値 1, 1.0, 0x1F, 017,777L
Boolean true, false
文字 'a'
文字列 a , '\u0041', "abc", "\u0041\u0042"
ヒアドキュメント """C;\scala\test"""
※URLや、複数行の文字列を扱うのに便利です。
1行コメント // 1行コメントです
複数行コメント /* 複数行
コメントです */
scaladocコメント /** クラス・メンバの説明 */

変数

 変数の書式は、次のとおりです。

宣言詞 変数名 : 変数の型 = 初期値

 「: 変数の型」の部分は大抵の場合、省略可能です。省略した場合はScalaコンパイラが自動で型を判定します(型推論)。なお、変数には3種類あるので順に解説していきます。

1)var(再代入可能)

 var(再代入可能)は書き換え可能な変数です(LIST1)。

LIST1
scala> var testVar = 1    //変数を宣言&初期化
testVar: Int = 1

scala> testVar = 2        //再代入可能
testVar: Int = 2

scala> testVar = "asdf"    //異なる型の値を代入する事はできない
<console>:5: error: type mismatch;
 found   : java.lang.String("asdf")
 required: Int
       testVar = "asdf"
2)val(再代入不可能)

 val(再代入不可能)は、Javaのfinal、C/C++のconstに相当し、書き換え不可能な変数です(LIST2)。

LIST2
scala> val testVal = 1
testVal: Int = 1

scala> testVal = 2        //再代入は出来ない
<console>:5: error: reassignment to val
       testVal = 2
               ^
3)lazy val(再代入不可、遅延評価)

 lazy val(再代入不可、遅延評価)は、valと同じですが、初めて参照されたときにメモリ領域が確保されます。LIST3の時点で、はじめてメモリ上に確保されますが、メンバ変数をlazy valとして宣言しておくと効率的にメモリを使用できます。

LIST3
scala> lazy val testLazyVal = 1    //宣言と初期化
    testLazyVal: Int = 1

// この時点では、メモリ上には存在しない。

scala>    val test = testLazyVal    //参照されると、メモリ上に確保される
    test: Int = 1

次のページ
関数

この記事は参考になりましたか?

新開発言語「Scala」の実体連載記事一覧

もっと読む

この記事の著者

株式会社パテントビューロ 三木隆史(ミキ タカフミ)

株式会社パテントビューロ所属。マネージャー業務と平行して、Webアプリケーション開発、自然言語系の研究開発を行なう。以前はC言語による組込開発。違和感なくScalaへ移行できたことや、ロジック部分に注力できる生産性の高さに驚いている。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

株式会社パテントビューロ 木村吉博(キムラ ヨシヒロ)

政府系研究機関での研究開発を経て、現在、株式会社パテントビューロにて、プログラミング(知財関連文書(SGML/XML)の変換バッチ処理のScalaでの記述など)を担当している。複雑でイレギュラーな記述も多々見られる大量の文書を相手にする際に、Scalaの書きやすさと高速性とに大いに助けられている。か...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4475 2009/11/06 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー