Scalaは、JVMの他の言語とは非常に徹底したアプローチで異なります。Java1.5のジェネリックシステムの設計者としても知られるMartin Odersky教授が率いる最も強力な欧州EPFL研究所の研究室は、この言語で動作します。 もちろん、これはサポート量の観点から、SunやMicrosoftのような本格的な商業オフィスと比較することはできません。そのため、言語はゆっくりと開発され、ごく最近「ビジネスに参入」しました。
それについて何が面白いですか?
まず第一に、Java開発の手荷物の通常の構文とアクセシビリティ、およびそれとの自由な混合-既存のJavaプロジェクトに複数のScalaクラスを安全に追加でき、すべてが機能します(ScalaにはJavaから利用できない拡張機能がありますが、通常は反対を決定することは難しくありませんすべてが100%アクセス可能です)。
簡潔で表現力豊かなコード
最も単純なタイプの推論と構文の緩和から始めます。
def toString = "a:" + a //メソッド val map = Map(1-> "one"、2-> "two")// map:Map [Int、String]
タプル(タプルです):
def error =( "Not found"、404)//メソッド val(msg、code)= error // msg == "Not found"、code == 404
機能的なコレクションで終わる:
リスト(1、2、3、4、5).filter(_%2 == 1).map(_ * 2).mkString( "、")// "2,6,10"
特性の混合(Javaのインターフェースのような、実装の可能性のみ):
valハンドラ= TransactionSupportでAdminRoleRequiredでログを記録する新しいDefaultHandler
暗黙的な変換によるクラスの拡張(プリミティブ型を含む):
val date = today + 1.month + 5.days
そして、もちろん、ケースクラス:
case class Person(name:String、age:Int)// getters、equals、hashCode、toStringなど val p = Person( "Vasia"、12)
機能的アプローチとオブジェクト指向アプローチの定性的組み合わせ
Scalaは、静的型付けと、機能的アプローチとオブジェクト指向アプローチのよく考えられた(そして学位論文に裏打ちされた)混合を備えた最初の「ワイドプロファイル」言語です。
- 最も強力な型システム- 特性 、 高次のパラメトリック多型 、型推論、暗黙的な変換(興味深い例: コンパイル段階で組み立てられたハノイの塔 )
- 任意の値がオブジェクトであり、任意の操作がメソッドです(1 + 2は1と同じです。+(2))
- 関数は値です(変数に割り当てたり、パラメーターによって渡されたりすることができます)。
明らかではありませんが、このアプローチは実際にはそのシンプルさと信頼性に驚きます-関数型プログラミングは、変更可能な状態を最小限に使用することを教えて(同じこととそれと一緒に暮らすことを忘れないでください)、プログラムを多くの小さく、よく読んで、自動的に簡単にテストされるメソッド、強力なタイピングおよび特性により、要件を明確に設定し、小さなエラーの束を回避できます(コンパイルされた場合、動作します)。
Scalaボリューム仕様-少ないJava仕様
Scalaコミュニティの1つのタイプは最近、「C ++とは異なり、Scalaを学習すればするほどシンプルになります」と述べています。 実際、これがこの言語の主な目的であり、その名前であるSCAlable言語でもあります。 仕様には基本的なもののみが記載されていますが、それらに基づいて、言語の一部のように見え、複雑な産業システムの構築に使用できる新しい便利なデザインを構築できます。 同時に、構文の弱点(ブラケット、戻り値の型など、多くの構造を省略できる)のため、この言語は単純なスクリプトでも便利です(クラスなしで.scalaファイルを記述し、スクリプトとして実行できます)。
説明のために、 ScalaのBASICに関する最近の投稿。
貴重な毛皮だけでなく
上記の「アメニティ」に加えて、名前付きパラメーターとデフォルトパラメーターがあります。
def box(width:Int = 100、height:Int = 200)= ... //メソッド box(height = 300)// box(100、300)と同じ
名前ごとのパラメーター(必要な場合のみ計算):
def debug(msg:=> String)= if(debugEnabled)println(msg) debug( "Debug message:" + heavyMethod())// heavyMethodはdebugEnabledの場合にのみ呼び出されます
遅延初期化(最適化されたスレッドセーフ):
class Context {lazy val(user、password)= {/ *重い初期化* /}}
ソースコードでのXMLサポート:
def description = <div> <h4> {label} </ h4> {text} </ div>
高度なアクセスレベルシステム:
protected [package] val a //パッケージと相続人に見える private [this] val b //このクラスのこのインスタンスにのみ可視
そしてもちろん、非常に強力なパターンマッチング:
ケースクラスAddress(市:文字列、通り:文字列) ケースクラスPerson(名前:文字列、年齢:Int、アドレス:アドレス) somePersonマッチ{ case Person( "Vasia"、_、_)=> ... // name == "Vasia"、残りは重要ではありません case Person(_、n、_)if n <18 => ... //年齢<18 case Person(_、_、Address(_、 "Apricot"))=> ... // Apricot Streetからのみ case _ => ... //その他すべて }
その他
興味深いものすべてを1つの投稿に集めることは非常に困難です。 多すぎる。 一度でも覚えていません。 他に何を追加しますか:
- Scalaは、たとえば、Twitter、LinkedIn、FourSquare(ユーザー数150万、1か月あたり3100万ビュー、1日あたり2000万のAPIリクエスト)、Sony、Siemensで使用されています。
- Scalaで人気のあるWebフレームワークであるLiftの最初のバージョンは1年以上前にリリースされ、 FoursquareやNovell Pulseなどの本格的なプロジェクトで既に使用されています
- Akkaライブラリーは、分散システムの分野におけるErlangの成果をJVMインフラストラクチャーに移行する際に非常に良い結果を示しています
- 英語の会話を理解している人には、最近のScala DaysカンファレンスでのOderskyの紹介ビデオをお勧めします。 他にも多くの興味深い報告がありました 。
- IDEとしてIntelliJ IDEA Community Edition + Scalaプラグインをお勧めします。Eclipse プラグインもすでに良さそうです。試してみてください。
- トピックの興味深いリンクを追跡するには、たとえば、(私のものではなく)を読むことができます: twitter.com/implicit_ly、twitter.com / ScalaAtSO 、 twitter.com / bubbl_scala
私について:私は約10年間Javaでプログラミングを行ってきました。昨年、当局に私たちのプロジェクトでScalaを試すよう説得しました。最初のプロジェクトは、自己文書化JSON / REST Webサービスで、誰もがそれを気に入っていました。今では、素晴らしいWebインターフェイスの試用版(3500 Javaクラス)Scala + Vaadinで。