この記事はWeChatの公開アカウント「ビッグデータ左右手」から転載したもので、著者はZuoyouです。この記事を転載する場合は、Big Data Left and Right Hand の公開アカウントにご連絡ください。 序文オブジェクト指向の関数型プログラミング言語である Scala は、オブジェクト指向プログラミングと関数型プログラミングを組み合わせて、コードをより簡潔で効率的かつ理解しやすいものにします。これが Scala が人気を博した理由です。 Scala は JVM 言語です。ビッグデータ エコシステムのほとんどのコンポーネントは Java で開発されており、Scala は Java とシームレスに混合できるため、ビッグデータ エコシステムにうまく統合できます。 メインコンテンツ開発環境、ループ、例外、ジェネリックなどの基本的なものは記載されなくなります。この記事では、概念の理解と使用方法に重点を置いて、独自の特別なエッセンスのみを紹介します。 1. 変数とデータ型 2. 関数型プログラミング (a) 高階関数 (b) 匿名関数 (c)閉鎖 (d) 関数カリー化 3. オブジェクト指向 (a) クラスとオブジェクト (b) コンパニオンオブジェクト (c)特徴 4. パターンマッチング 5. 暗黙的な変換 変数とデータ型変数(var は変数を宣言し、val は定数を宣言します) var修飾子変数は変更可能です val によって変更された変数は変更できません しかし、本当にそうなのでしょうか? 以下の定義について
効果テスト
実際、var によって変更されたオブジェクト参照は変更できますが、val によって変更されたオブジェクト参照は変更できませんが、オブジェクトの状態は変更できます。 可変性と不変性の理解Scala の List は不変であり、Map は可変と不変の両方であることがわかっています。次の例を見てください var mutable と List immutable の組み合わせ
理解とはvar list が指すオブジェクトは List("left","right") です。 後でリストが変更されます。変数var修飾子なので、リストは新しいリスト(「left」、「right」、「hand」)を指すことができます。 以下の場合(エラーを報告します)
val var と Map の可変と不変
理解する不変のマップに要素を追加すると、元のマップは変更されず、元のマップと追加された要素を保存するために新しいマップが生成されます。 変更可能なマップに要素を追加する場合、新しいマップは生成されず、要素は元のマップに直接追加されます。 val に関して不変なのはポインターのみであり、これはオブジェクト マップとは関係ありません。 データ型
関数型プログラミング高階関数 高階関数とは、他の関数をパラメータとして受け取ったり、結果として関数を返したりする関数です。関数は Scala の第一級オブジェクトです。 簡単な例
関数としてのメソッド
関数を返す関数
匿名関数 Scala で匿名関数を定義する構文は非常にシンプルで、矢印の左側にパラメータ リスト、右側に関数本体が配置されます。 匿名関数を使用すると、コードはより簡潔になります。
パラメータなしも可能
閉鎖クロージャは、戻り値が関数外で宣言された 1 つ以上の変数に依存する関数です。 クロージャは一般に、関数内のローカル変数にアクセスできる別の関数と考えることができます。 簡単に言えば、関数内の変数がそのスコープ内にない場合でも、外部からアクセスできるということです。
クロージャの本質は、コードと非ローカル変数の混合である。 クロージャ = コード + 使用される非ローカル変数
関数カリー化 カリー化とは、もともと 2 つのパラメータを受け入れる関数を、 1 つのパラメータを受け入れる新しい関数に変換するプロセスを指します。新しい関数は、元の 2 番目の引数を引数として受け取る関数を返します。 まず簡単な
関数変換(この方法はカリー化と呼ばれます)
実装プロセス add(1)(2)は実際には2つの通常の関数(非カリー化関数)を順番に呼び出します。 最初の呼び出しは 1 つの引数 x を受け取り、関数型の値を返します。 2 回目にこの関数が呼び出されるときは、パラメータ y の値が使用されます。
オブジェクト指向クラスとオブジェクト クラスはオブジェクトの抽象化であり、オブジェクトはクラスの具体的なインスタンスです。クラスは抽象的でありメモリを占有しませんが、オブジェクトは具体的でありストレージスペースを占有します。クラスはオブジェクトを作成するための設計図です。特定のタイプのオブジェクトに含まれるメソッドと変数を定義するソフトウェア テンプレートです。 クラスにはクラスパラメータがある クラス パラメータはクラスの本体内で直接使用できます。クラス パラメータには var というプレフィックスを付けることもでき、private、protected、override を使用して変更することもできます。 Scala コンパイラはクラス パラメータを収集し、同じパラメータを持つクラスのプライマリ コンストラクターを作成します。 、フィールドでもメソッド定義でもないクラス内のすべてのコードをプライマリ コンストラクターにコンパイルします。
例クラス ケース クラスは通常、パターン マッチング用に最適化できる特別なクラスであるサンプル クラスに変換されます。 クラスがケースクラスとして宣言されている場合。以下の機能があります:
オブジェクトとコンパニオンオブジェクト Scala シングルトン オブジェクトは非常に重要です。 Java とは異なり、静的クラス、静的メンバー、静的メソッドはありませんが、Scala はオブジェクト オブジェクトを提供します。このオブジェクトは Java の静的クラスに似ています。デフォルトでは、そのメンバーとメソッドは静的です。 シングルトン オブジェクトを定義することはクラスを定義することを意味しないため、それを使用して新しいオブジェクトを作成することはできません。シングルトン オブジェクトがクラスと同じ名前を共有する場合、そのオブジェクトはクラスのコンパニオン オブジェクトと呼ばれます。 クラスとそのコンパニオン オブジェクトは同じソース ファイルで定義する必要があります。このクラスは、このシングルトン オブジェクトのコンパニオン クラスと呼ばれます。 クラスとそのコンパニオン オブジェクトは、互いのプライベート メンバーにアクセスできます。
特性 Scala のトレイトは Java のインターフェースと同等ですが、実際にはインターフェースよりも強力です。インターフェースとは異なり、プロパティとメソッドの実装も定義できます。 通常、Scala クラスは単一の親クラスからのみ継承できますが、特性の場合は複数の親クラスから継承できます。その結果、多重継承が実装されます(キーワード with)。実際、Scala の特性は Java の抽象クラスに似ています。
パターンマッチングJava の switch を例に挙げてみましょう。 Java の switch は、いくつかの基本的な型マッチングのみを実行し、いくつかのアクションを実行しますが、戻り値はありません。 Scala のパターン マッチングははるかに強力です。値の一致に加えて、型の一致も可能です。
私が驚いたのは(ほんの数行ですが)
暗黙的な変換Scala が提供する暗黙的な変換と暗黙的なパラメータ関数は非常に特徴的な機能です。これはJavaなどのプログラミング言語にはない機能です。特定のタイプのオブジェクトを別のタイプのオブジェクトに変換するように手動で指定できます。これらの機能を通じて、非常に強力で特別な機能を実現できます。 ルール (1)暗黙的な変換を使用する前に、importを使用して現在のスコープへの暗黙的な変換を参照するか、スコープ内で暗黙的な変換を定義する必要があります。 (2)暗黙的な変換は、他の変換が利用できない場合にのみ実行できます。同じスコープ内の同じソース タイプに対して複数の暗黙的な変換関数が定義されている場合、複数の暗黙的な変換関数が一致する可能性があるとコンパイラはエラーを報告します。そのため、使用時には不要な暗黙的な定義を削除してください。 暗黙的なデータ型の変換 String 型は Int 型に自動的に変換できないため、String 型の値を Int 型の変数または定数に割り当てると、コンパイラはエラーを報告します。しかし.....
パラメータの暗黙的な変換 いわゆる暗黙のパラメータとは、関数またはメソッド内で implicit によって変更されるパラメータを指します。このとき、Scala は、暗黙の値、つまり暗黙の値で変更された指定された型のオブジェクトを見つけて、パラメータを注入しようとします。
|
<<: マルチクラウドおよびハイブリッドクラウドシナリオにおけるデータ同期ソリューション: Kafka
今日のウェブマスター、特に私たちの草の根ウェブマスターは、「虎」という言葉を聞くと恐怖を感じます。こ...
この間、グループを立ち上げましたが、多くの問題が見つかりました。グループを立ち上げた目的をいつも疑う...
【ポイント】 新しいインターネット時代では、ユーザーが製品を使用する動機は、必要性から好みへと変化し...
過去 1 年間、ハイブリッド クラウドとマルチ クラウドが話題となってきました。サービスを提供するた...
Hostyun は、ロサンゼルス KR データセンターにかなりの数のマシンを導入しています。VPS ...
k8s の kube-proxy はネットワーク プロキシであり、Kubernetes クラスター内...
一定のライティングスキルを持つことは、インターネット マーケターの基本的なスキルであると言えるでしょ...
georgedatacenter (2009 年設立) は現在、ロサンゼルス、カンザス、アムステルダ...
Flappy Bird は今年 2 月 10 日に開発元によって主要ストアから削除されましたが、その...
BetterVPS は、2011 年に Web デザイナーと開発者によって設立された ShoveHo...
ウェブサイトのトラフィックは、ウェブマスターが常に追求する目標です。ウェブサイトが収益を上げたい場合...
中小企業は、ウェブサイトの最適化に取り組む際に、スタッフの急速な離職という問題に直面することが多く、...
「PQ Hosting」SRLはモルドバに設立されたホスティング会社です。オランダ(Serveriu...
今日は、[Kubernetes] DaemonSet の詳細な説明を共有して、履歴書を充実させ、面接...
A5ウェブマスターネットワークによると、数ヶ月間激化していた電子商取引の価格戦争は本日午前9時に最高...