この投稿を読む前に、「Scala Basic」と「Scala Intermediate」のインタビューの質問と回答の前の2つの投稿をご覧ください。これによってScala言語の基本的な知識を得ることができます。
Scalaの高度なインタビューの質問
この投稿では、Scalaの高度な概念とリアルタイムプロジェクトに関連するいくつかの高度なScalaインタビューの質問について議論します。注意: このリストは既に非常に大きくなっているため、残りの質問と回答を含む別の投稿を提供します。その投稿は「Scala Intermediate and Advanced Interview Questions and Answers」で参照してください。また、シニアまたは経験豊富なScala/Java開発者に役立つ、Scala/Javaの並行性と並列性に関するインタビューの質問と回答についても議論します。
Scalaの高度なインタビューの質問
このセクションでは、Scalaの中級インタビューの質問をすべてリストアップし、次のセクションではそれらについて詳しく説明します。
- Scalaの最新バージョンは何ですか?Scala 2.12の主な変更または更新点は何ですか?
- ScalaにおけるOptionとは何ですか?SomeとNoneは何ですか?ScalaにおけるOption/Some/Noneデザインパターンとは何ですか?
- ScalaにおけるEitherとは何ですか?LeftとRightは何ですか?ScalaにおけるEither/Left/Rightデザインパターンを説明してください。
- Java SE 8におけるScalaのOptionに相当する構造は何ですか?ScalaのOptionの使用目的は何ですか?
- 関数型プログラミング(FP)の利点または純粋関数の利点は何ですか?
- RESTful WebサービスまたはREST APIを開発するための人気のあるScalaベースのフレームワークは何ですか?
- ScalaベースのアプリケーションのREST APIドキュメントを生成するための最適なフレームワークは何ですか?
- Javaベースのアプリケーションに対するHibernateのように、Play/Scalaベースのアプリケーションで使用できる人気のあるORMフレームワークは何ですか?
- MongoDB NoSQLデータストアにデータを永続化するためのPlay/Scalaアプリケーションを開発するための最適なツールは何ですか?
- PlayとScalaを使用してアプリケーションを開発している人気のあるクライアントは誰ですか?
- Playフレームワークで使用するのに最適な言語は、ScalaまたはJavaですか?
- Scalaはどのようにして高いスケーラビリティと高いパフォーマンスのアプリケーションの両方をサポートしていますか?
- PlayとScalaベースのアプリケーションを開発するための利用可能なビルドツールは何ですか?
- SBTとは何ですか?PlayとScalaアプリケーションを開発するための最適なビルドツールは何ですか?
- PlayとScalaベースのアプリケーションには、利用可能なユニットテスト、機能テスト、およびBDDフレームワークがあります。
- PlayとScalaベースのアプリケーションに最適なコードカバレッジツールは何ですか?
- PlayとScalaベースのアプリケーションに最適なScalaスタイルチェッカーツールは何ですか?
- どのIDEがPlayとScalaベースのアプリケーション開発をサポートしていますか?どのようにサポートしていますか?
- Playのデフォルトのユニットテストフレームワークは何ですか?Playのデフォルトのビルドツールは何ですか?Playのデフォルトのテンプレートエンジンは何ですか?Playフレームワークで利用可能な組み込みWebサーバーは何ですか?
- ScalaはなぜJavaよりも優れているのですか?ScalaのJava(Java 8)に対する利点は何ですか?Javaと比較して、Scalaの主な利点またはメリットは何ですか?
- Scalaにおける匿名関数とは何ですか?Scalaにおける関数リテラルとは何ですか?Scalaの匿名関数/関数リテラルの利点は何ですか?
- 高階関数(HOF)とは何ですか?
- Caseクラスと通常のクラスの違いは何ですか?
- Webアプリケーションを開発するためのPlay/Scalaスタックの利点は何ですか?
- コール・バイ・ネームとは何ですか?ScalaとJavaはコール・バイ・ネームをサポートしていますか?コール・バイ・バリューとコール・バイ・ネームの関数パラメーターの違いは何ですか?
- ScalaでサポートされていないJavaのOOP構造は何ですか?JavaでサポートされていないScalaのOOP構造は何ですか?Scalaによって導入されたがJavaではサポートされていない新しいOOP構造は何ですか?
- Scala言語でWebアプリケーションを開発するための人気のあるMVCフレームワークは何ですか?
- JavaベースとScalaベースのMavenプロジェクトの構造の主な違いは何ですか?
- ScalaのExtractorとは何ですか?ScalaのConstructorとExtractorの違いは何ですか?ScalaのExtractorの用途は何ですか?
- Scalaベースのアプリケーションでの「???」の使用目的は何ですか?
- ScalaコレクションAPIにおけるListとStreamの主な違いは何ですか?その違いを証明するにはどうすればよいですか?いつStreamを選択するべきですか?
- Scalaにおける::と#::の違いは何ですか?Scalaにおける:::と#:::の違いは何ですか?
- Fullstack Scala Developerになりたい場合、どの技術スタックを学ぶべきですか?
Scalaの高度なインタビューの質問と回答
このセクションでは、上記のリストから各質問を取り上げ、必要に応じて適切な例を使用して詳しく説明します。これらの概念を例を交えて詳しく理解したい場合は、Scalaのチュートリアルセクションの以前の投稿を参照してください。
現在の最新のScalaバージョンは何ですか?Scala 2.12の主な変更またはアップデートは何ですか?
現在のScalaの安定版は2.11.7です。Java SE 7をサポートしています。Scala 2.12の主な変更またはアップデートは、Java SE 8以降のバージョンのみをサポートすることです。Scala 2.12は2.11.xシリーズとはバイナリ互換性がありません。現在はマイルストーンビルドのみです。
ScalaでのOptionとは何ですか?SomeとNoneは何ですか?ScalaでのOption/Some/Noneデザインパターンとは何ですか?
Scalaでは、Optionは存在するか存在しないかのオプション値を表すために使用されます。Optionは抽象クラスです。Optionには2つのサブクラスがあります:SomeとNone。Option、Some、Noneの3つはすべて「scala.Option」のような「scala」パッケージで定義されています。Optionは、要素が0個または1個だけ含まれるバウンドされたコレクションです。Optionに要素が含まれていない場合はNoneです。Optionに1つの要素が含まれている場合はSomeです。Someは存在する値を表すために使用されます。Noneは存在しない値を表すために使用されます。例:
def get(val index: Int): Option[String]
このメソッドは、Listからのものと仮定します。このメソッドの戻り値の型はOption[String]です。Listに要素が含まれている場合、このgetメソッドはそのインデックス位置にある”Some[String]”要素を返します。それ以外の場合、要素がない場合は”None”を返します。Someはケースクラスであり、Noneはオブジェクトです。どちらもケースクラス/オブジェクトなので、パターンマッチングで非常によく使用できます。これらの定義の組み合わせは、ScalaにおけるOption/Some/Noneデザインパターンとして知られています。
ScalaにおけるEitherとは何ですか?ScalaにおけるLeftとRightとは何ですか?ScalaにおけるEither/Left/Rightデザインパターンを説明してください。
Scalaでは、Eitherは抽象クラスです。2つの可能性のある型の1つの値を表すために使用されます。2つの型パラメータを取ります:Either[A,B]。正確に2つのサブタイプ、LeftとRightがあります。Either[A,B]がインスタンスAを表す場合、それはLeftであることを意味します。インスタンスBを表す場合、それはRightであることを意味します。これは、ScalaにおけるEither/Left/Rightデザインパターンとして知られています。
ScalaのOptionに相当するJava SE 8の構造体は何ですか?OptionはScalaでどのように使用されますか?
ScalaのOptionは、Java SE 8のOptionalに類似しています。Java SE 8では、値の存在または非存在を表すために新しいユーティリティクラスOptionalが導入されました。Optionalはjava.utilパッケージで利用可能です。ScalaのOptionとJava SE 8のOptionalは、オプションの値を表すために使用されます。両方とも不要なnullチェックとNullPointerExceptionを避けるために使用されます。
関数型プログラミング(FP)の利点または純粋関数の利点は何ですか?
以下は、関数型プログラミング(FP)または純粋関数の利点です:
- よりモジュール化されている
- 理解しやすい、または理由付けしやすい
- テストしやすい
- バグの発生しにくい
- 再利用しやすい
- 並列化および一般化しやすい
RESTful WebサービスやREST APIを開発するための人気のあるScalaベースのフレームワークは何ですか?
RESTful Webサービスを開発するための多くのScalaベースのフレームワークがあります。最も人気のあるフレームワークは次のとおりです:
- Play Framework
Playでは、REST APIのURLをルートと呼びます。Playフレームワークでは、すべてのルートを1つの場所に配置します。REST APIの開発を容易にするステートレスなWebフレームワークです。- Scalatra Framework
REST APIを開発するための非常にシンプルで簡単なScalaベースのWebフレームワークです。- Spray Framework
とても簡潔で、Akkaフレームワークの上に構築されているため、アクターモデルを使用してREST APIを開発するのに適しています。- Lift Framework
パターンマッチングのコンセプトを使用してルーティングを行うことができます。
ScalaベースのアプリケーションのREST APIドキュメントを生成するための最適なフレームワークは何ですか?
Swaggerはその目的に最適なツールです。ScalaベースのアプリケーションのREST APIドキュメントを生成するための非常にシンプルでオープンソースのツールで、JSON形式で出力します。
- Play with Scalaを使用してREST APIを開発し、その後、play-swaggerモジュールを使用してREST APIのドキュメントを作成します。
- Scalaを使用してSprayを開発してREST APIを作成し、その後、spray-swaggerモジュールを使用してREST APIのドキュメントを作成します。
Javaベースのアプリケーションに対するHibernateのように、Play/Scalaベースのアプリケーションで使用できる人気のあるORMフレームワークは何ですか?
Javaベースのアプリケーションに対するJPA、Hibernate、ToplinkなどのORMフレームワークと同様に、Play/Scalaベースのアプリケーションでも使用できる多くのORMフレームワークがあります。Play/Scalaベースのアプリケーションで人気のあるORMフレームワーク:
- Slick
- Anorm
- SORM(Scala ORM)
- Squeryl
MongoDB NoSQLデータストアにデータを永続化するためにPlay/Scalaアプリケーションを開発するための最適なツールは何ですか?
ReactiveMongoは、MongoDB NoSQLデータストアにデータを永続化するためにPlay/Scalaアプリケーションを開発するための最高のScalaドライバです。完全に非同期でノンブロッキングなI/O操作をサポートしています。
PlayとScalaを使用してアプリケーションを開発している人気のあるクライアントは?
数千のクライアントが本番環境でPlayとScalaを使用しています。以下は、より人気のあるクライアントのリストです。
- The Guardian
- Ocado
- LuchidChart
- GOV.UK
Playフレームワークで使用するのに最適な言語は、ScalaまたはJavaですか?
Play 2は完全にScalaで書かれています。JavaをPlayフレームワークと組み合わせる場合、Javaは完全なFP機能をサポートしていないため、多くの問題に直面する必要があります。Scalaは、高いスケーラビリティ、より優れたパフォーマンス、並行性/並列性、低レイテンシのアプリケーションを開発するためにPlayフレームワークと組み合わせて使用する最適なオプションです。なぜなら:
- Play 2は完全にScalaで書かれています。
- それは完全なFP機能をサポートしています。
- それはJavaよりも表現言語的です。
- それはAkkaのアクターモデルを非常に簡単にサポートしています。
- それはTraitsのようないくつかの新しいOOP機能をサポートしています。
- Playの組み込みテンプレートはScalaで開発されています。
Scalaは高いスケーラビリティと高いパフォーマンスを両立する方法をサポートしていますか?
Scalaはマルチパラダイムプログラミング(OOPとFPの両方)をサポートし、アクターコンカレンシーモデルを使用するため、非常にスケーラブルで高性能なアプリケーションを簡単に開発することができます。
PlayとScalaベースのアプリケーションを開発するための利用可能なビルドツールは何ですか?
以下の3つのビルドツールが最も人気があります:
- SBT
- Maven
- Gradle
SBTとは何ですか?PlayとScalaアプリケーションを開発するための最適なビルドツールは何ですか?
SBTはScala Build Toolの略で、Scalaベースのアプリケーションを開発するためのシンプルなビルドツールです。多くの人々がPlayとScalaアプリケーションのためにSBTビルドツールを使用しています。たとえば、IntelliJ IDEA Scalaプラグインはデフォルトでこの目的のためにSBTをビルドツールとして使用します。
PlayとScalaベースのアプリケーションには、利用可能なユニットテスト、機能テスト、またはBDDフレームワークがありますか?
以下は、Play/Scalaベースのアプリケーションに最も人気のある利用可能なユニットテスト、機能テスト、またはBDDフレームワークです:
- Spec2
- ScalaTest
- ScalaCheck
- Mokito
PlayとScalaベースのアプリケーションに最適なコードカバレッジツールは何ですか?
SCoverageは、PlayとScalaベースのアプリケーション向けのコードカバレッジツールです。SCoverageはScalaコードカバレッジツールの略です。以下のビルドツールをサポートするための3つの別々のプラグインがあります:
- SBT
- Maven
- Gradle
PlayとScalaベースのアプリケーションに最適なScalaスタイルチェッカーツールは何ですか?
JavaベースのアプリケーションのCheckstyleのように、ScalastyleはPlayとScalaベースのアプリケーションに最適なScalaスタイルチェッカーツールです。ScalastyleはScalaのソースコードを観察し、潜在的な問題を示します。以下のビルドツールをサポートするための3つの別々のプラグインがあります:
- SBT
- Maven
- Gradle
以下の2つのIDEをサポートするための2つの別々のプラグインがあります:
- IntelliJ IDEA
- Eclipse IDE
PlayとScalaベースのアプリケーション開発をサポートするIDEはどれですか?それらはどのようにサポートしていますか?
以下の2つの人気のあるIDEがPlayとScalaベースのアプリケーション開発をサポートしています:
- IntelliJ IDEA
- Eclipse IDE
Eclipse IDEはScala IDE for EclipseのようなScalaプラグインを使用してPlayとScalaベースのアプリケーション開発をサポートしています。IntelliJ IDEAは「Scala Plugin for IntelliJ IDEA」というプラグインを使用して、「Scala、SBT、Play 2 Framework」ベースのアプリケーションをサポートしています。- Playのデフォルトのユニットテストおよび機能テストフレームワークは何ですか?Playのデフォルトのビルドツールは何ですか?Playのデフォルトのテンプレートエンジンは何ですか?Playフレームワークで利用可能な組み込みのWebサーバーは何ですか?
Playフレームワークのデフォルトのユニットテストおよび機能テストフレームワークはSpec2です。Spec2フレームワークを使用すると、Play/Scalaベースのアプリケーションを簡単にテストすることができます。Playフレームワークのデフォルトのビルドツールは「Twirl」と呼ばれるビルトインテンプレートエンジンです。これはScalaで開発されています。これらのテンプレートを使用することで、Play/Scalaベースのアプリケーションを非常に簡単に開発することができます。Playフレームワークの組み込みまたはデフォルトのWebサーバーはNetty Serverです。
なぜScalaはJavaよりも優れているのですか?ScalaのJava(Java 8)に対する利点は何ですか?Javaと比較して、Scalaの主な利点やメリットは何ですか?
Scalaは以下の追加機能をサポートしているため、Java 8よりも優れています:
- 完全な関数型プログラミング機能
- より多様な式言語
- パターンマッチング
- Akkaアクターモデルへのより良いサポート
- トレイトを使用した継承のダイヤモンド問題の自動解決
- Akkaフレームワークを使った非同期およびノンブロッキングIOプログラミング
- 完全なリアクティブストリーミングAPI
Scalaにおける匿名関数とは何ですか?Scalaにおける関数リテラルとは何ですか?Scalaの匿名関数/関数リテラルの利点は何ですか?
匿名関数は関数でありながら、関数名を持たないものです。関数リテラルとも呼ばれます。Scalaにおける匿名関数/関数リテラルの利点は次のとおりです:
- 関数リテラルを変数に割り当てることができる
- 関数リテラルを他の関数/メソッドに渡すことができる
- 関数リテラルを別の関数/メソッドの結果/返り値として返すことができる
高階関数(HOF)とは何ですか?
高階関数(HOF)も関数ですが、次のいずれかまたは両方の動作を行います:
- 他の関数を引数として受け取る
- 関数を結果として返す
Caseクラスと通常のクラスの違いは何ですか?
Caseクラスもクラスですが、通常のクラスと比較すると以下の追加の機能や利点があります:
- デフォルトで、Caseクラスのコンストラクタパラメータは ‘val’ として宣言する必要がありません。
- デフォルトで、Caseクラスのコンストラクタパラメータはクラスフィールドになります。
- これらのメソッドは自動的に追加されます:toString、equals、hashCode、copy、apply、unapply。
- それは自動的にCompanionオブジェクトを取得します。
- Caseクラスのインスタンスを作成するために「new」キーワードを使用する必要はありません。
- パターンマッチングで簡単に使用できます。
これらのすべての機能は、Scalaコンパイラによってコンパイル時に追加されます。通常のクラスでは不可能です。
Play/Scalaスタックを使用してWebアプリケーションを開発する利点は何ですか?
以下は、Play/Scalaスタックを使用してWebアプリケーションを開発する主な利点です:
- オープンソース
Playは、ウェブアプリケーションを開発するためのオープンソースのフリーソフトウェアフレームワークです。- 生産性の向上
Playフレームワークの自動リロード機能により、開発者の生産性が向上します。変更をビルド、デプロイ、テストする必要はありません。変更を行い、ページを更新するだけで変更が反映されます。- 状態を持たず開発しやすいREST API
PlayはHTTPベースの状態を持たないモデルでウェブリクエストを処理するため、REST APIやRESTful Webサービスを開発するのが非常に簡単です。- エラーハンドリングが改善されています
Playフレームワークを使用してウェブアプリケーションを開発すると、非常に有用な形式でブラウザにすべてのエラーが表示されます。エラーメッセージ、エラーが発生したファイルの場所、行番号、エラーを理解するためのコードスニペットが強調表示されます。- 高性能でスケーラビリティが向上しています
Playフレームワークは、反応的な設計パターンに従って開発されており、非同期I/O機能を利用するためにNettyサーバーの上に構築されています。この機能のおかげで、非常にスケーラブルで高性能なアプリケーションを簡単に開発することができます。- 拡張が容易です
Playは非常に柔軟なフレームワークであり、プラグインを開発することが容易で、機能や機能性を拡張することができます。- 高い並行性と並列性
ScalaとPlayの両方が関数型プログラミングをサポートしているため、非常に簡単に高い並行性と優れた並列性を持つアプリケーションを開発することができます。FPはイミュータビリティ、純粋な関数(副作用のない関数)、パターンマッチング、アクターモデルなどをサポートしています。- より高い再利用性、テストしやすさ、モジュール化
ScalaとPlayの両方が関数型プログラミングをサポートしているため、よりモジュール化され再利用可能なアプリケーションを開発することができます。また、よりモジュール化されたアプリケーションをテストするのも非常に簡単です。
ScalaではサポートされていないJavaのOOP構造は何ですか?JavaではサポートされていないScalaのOOP構造は何ですか?Scalaで導入された新しいOOP構造は、Javaでサポートされていませんか?
ScalaではサポートされていないJavaのOOP構造:
- Scalaにはインターフェースの概念がありません。
- ScalaにはEnumの概念がありません。
JavaではサポートされていないScalaのOOP構造またはScalaで導入された新しいOOP構造:
- Scalaのトレイト
- 継承のダイヤモンド問題を自動的に解決する能力。
コールバイネームとは何ですか?ScalaとJavaはコールバイネームをサポートしていますか?コールバイバリューとコールバイネームの関数パラメータの違いは何ですか?
コールバイネームは、メソッド/関数のパラメータを必要な時またはアクセスする時にのみ評価します。使用しない場合は評価されません。Scalaはコールバイバリューとコールバイネームの両方の関数パラメータをサポートしていますが、Javaはコールバイバリューのみをサポートしています。コールバイバリューとコールバイネームの違い:これら2つの主な違いは以下の通りです:
- コールバイネームでは、関数パラメータは関数が呼び出されたときではなく、必要な時にのみ評価されます。
- コールバイバリューでは、関数パラメータは関数が呼び出されたときに評価されます。
- コールバイバリューでは、パラメータは関数の実行前に評価され、その関数内で何回使用しても、一度だけ評価されます。
- コールバイネームでは、パラメータはアクセスするたびに評価され、その関数内で使用するたびに評価されます。
- Scalaの構文の違い
コールバイバリュー:
def myFunction(a: Int, b: Int) { }
ここでは、aとbはmyFunctionに対する値渡しパラメータです。名前渡し:
def myFunction(a: Int, b: => Int) { }
ここでは、aは値渡しパラメータであり、bはmyFunctionに対する名前渡しパラメータです。
Scala言語でWebアプリケーションを開発するための人気のあるMVCフレームワークは何ですか?
以下は、Scala言語でWebアプリケーションを開発するための最も人気のあるMVCフレームワークです:
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
JavaベースとScalaベースのMavenプロジェクトの構造の主な違いは何ですか?
ほとんどのJavaベースのプロジェクトでは、ビルドツールとしてMavenを使用しています。ただし、Scalaベースのアプリケーションを開発する際には、多くの人がビルドツールとしてSBTを使用していますが、一部のチームではScalaベースのアプリケーションを開発するためにMavenも使用しています。JavaベースとScalaベースのプロジェクトのMavenフォルダ構造はほぼ同じですが、フォルダ名の変更のみがあります。以下の図に示すように、JavaとScalaのフォルダ名です。JavaベースのMavenプロジェクトのフォルダ構造: ScalaベースのMavenプロジェクトのフォルダ構造:
Scalaにおけるエクストラクタとは何ですか?コンストラクタとエクストラクタの違いは何ですか?Scalaにおけるエクストラクタの使用目的は何ですか?
JavaやScalaだけでなく、ほとんどのOOP言語では、コンストラクタはパラメータ(またはコンポーネント)を使用してクラスのオブジェクトまたはインスタンスを作成(または組み立て)するために使用されます。エクストラクタはコンストラクタとは正反対です。Scalaでは、エクストラクタはオブジェクトをそのパラメータ(またはコンポーネント)に分解または分解するために使用されます。Scalaでは、applyメソッドはコンストラクタです。内部的に、エクストラクタはunapplyメソッドを使用してオブジェクトをその部分(またはパラメータ)に分解します。Scalaでは、エクストラクタは主にパターンマッチングのコンセプトで使用されます。パターンマッチングのコンセプトについては後ほど説明します。
Scalaベースのアプリケーションでの ‘???’ の使用目的は何ですか?
この ‘???’ という3つの疑問符は、Scalaの演算子やメソッドではありません。これは、実装が進行中であることを示すために開発者が提供する必要があるメソッドをマークするために使用されます。このメソッドは、以下に示すようにscala.PreDefクラスで定義されています:
def ??? : Nothing = throw new NotImplementedError
実装を提供せずにこのメソッドを実行すると、以下に示すように ‘NotImplementedError’ エラーがスローされます:
scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int
scala> add(10,20)
scala.NotImplementedError: an implementation is missing
Scala Collection APIのListとStreamの主な違いを説明してください。その違いを証明するにはどうすればよいですか?いつStreamを選ぶべきですか?
Scalaでは、ListとStreamはどちらもCollection APIから提供されており、ほぼ同様に機能します。両方ともイミュータブルなコレクションです。ただし、Scala Collection APIのListとStreamの間には1つの主な違いがあります:Listの要素はイーガリーに評価され、Streamの要素はレイジリに評価されます。つまり、アクセスするときに評価されます。
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
ここで、Listの要素はListオブジェクトを作成する時点ですべて評価されることがわかります。しかし、同じことをStreamに対して行った場合、すべての要素を見ることはできません。最初に評価された要素のみを見ることができ、残りの要素はレイジリに評価されます。以下に示します:
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
要素にアクセスするときにのみ要素を評価したい場合は、Streamを使用することが適しています。
Scalaにおける::と#::の違いは何ですか?Scalaにおける:::と#:::の違いは何ですか?
ScalaのCollection APIでは、
- ::と:::はListクラスで利用可能なメソッドです。
- #::と#:::はStreamクラスで利用可能なメソッドです。
- Listクラスでは、::メソッドはリストの先頭に要素を追加するために使用されます。
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)
scala> list1 = 0 :: list1
list1: List[Int] = List(0, 1, 2, 3, 4)
- Listクラスでは、:::メソッドは指定されたリストの要素をこのリストの前に連結するために使用されます。
scala> var list1 = List(3,4,5)
list1: List[Int] = List(3, 4, 5)
scala> val list2 = List(1,2) ::: list1
list2: List[Int] = List(1, 2, 0, 1, 2, 3, 4)
- Streamクラスでは、#::メソッドは指定された要素をストリームの先頭に追加するために使用されます。追加された要素のみが評価され、その後は遅延評価されるストリーム要素が続きます。
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> s1 = 0 #:: s1
s1: scala.collection.immutable.Stream[Int] = Stream(0, ?)
- Streamクラスでは、#:::メソッドは指定されたストリームをストリームの先頭に連結するために使用されます。追加された要素のみが評価され、その後は遅延評価されるストリーム要素が続きます。
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> val s2 = Stream(-1,0) #::: s1
s2: scala.collection.immutable.Stream[Int] = Stream(-1, ?)
- ::メソッドはListクラスのcons演算子として機能し、#::メソッドはStreamクラスのcons演算子として機能します。ここで「cons」とは「構築する」という意味です。
- ::: メソッドは、Listクラスの連結演算子として機能し、#::: メソッドは、Streamクラスの連結演算子として機能します。
フルスタックScala開発者になりたい場合、どの技術スタックを学ぶべきですか?
フルスタックScala開発者になりたい場合、以下の技術スタックを学ぶべきです:
- Scala 2.11.7
- Play 2.4.6フレームワーク
- Akka 2.3フレームワーク
- ビルドツール:SBT/Maven
- JSフレームワーク:CoffeeScript/JavaScript
- IDE:IntelliJ IDEA 15/Eclipse IDE 4.x
- TDD & BDDフレームワーク:ScalaTest,Spec2,ScalaCheck,Mockito
- PlayとScalaでのマイクロサービス
- SCoverage
- Scalastyle
- 関数型プログラミングデザインパターン
- Scalaによる機械学習
{
“error”: “Upstream error…”
}
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions