Scalaインタビューの質問と回答

ようこそ、Scalaの面接の質問と回答へ。最近では、ほとんどの金融/銀行、政府、通信、ソーシャルネットワーキングなどの企業が、プロジェクトを開発するためにScala、Play、およびAkka Frameworkを使用しています。なぜなら、これらのフレームワークがOOPsとFPの両方をサポートし、多くの利点を提供しているからです。

Scalaの面接の質問

私は、インタビューでの知識とScalaエコシステムまたはフルスタックScala(Scala/Play/Akka)開発経験を、いくつかの投稿を通じて共有していきます。3つの独立した投稿を共有します。いくつかの質問は単一の質問であり、いくつかはいくつかのサブ質問を持っています。合計で約200の質問を議論します。これらすべての質問に精通している場合、Scalaの開発者の面接を確実にクリアできるでしょう。ただし、フルスタックScala開発者として継続する場合は、これらすべてのフルスタックScala技術を徹底的に学習する必要があります。

導入

I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:

  1. Scala Intermediate Interview Questions and Answers:-
    ここでは、Scalaの基本的な面接の質問について議論します。これは、新卒者またはJava開発者がScala開発に移りたいか、Scala開発者として1年以上の経験がある場合に役立ちます。Scala Advanced Interview Questions and Answers:-
    2年以上のScala/Java開発者としての経験がある方に役立つ面接の質問について議論します。Scala/Java Concurrency and Parallelism Interview Questions and Answers:-
    シニアまたは経験豊富なScala/Java開発者に役立つ、Scala/Javaの並行性および並列性に関する面接の質問と回答を取り上げます。

また、JavaからScalaに移行するユーザーがこれらの投稿から利益を得るために、ScalaとJavaの構造の違いについても議論します。この投稿では、基本的なScalaの面接の質問について議論します。

Scala Basic Interview Questions

このセクションでは、すべてのScalaの基本的なインタビューの質問をリストアップし、次のセクションではそれらについて詳しく話し合います。

  1. Scalaとは何ですか?言語ですか、プラットフォームですか?OOPまたはFPをサポートしていますか?Scalaの創設者は誰ですか?
  2. Scalaは静的型付け言語ですか?静的型付け言語とは何ですか?動的型付け言語とは何ですか?静的型付け言語と動的型付け言語の違いは何ですか?
  3. Scalaは純粋なOOP言語ですか?Javaは純粋なOOP言語ですか?
  4. Scalaはすべての関数型プログラミングの概念をサポートしていますか?Java 8はすべての関数型プログラミングの概念をサポートしていますか?
  5. Scala言語の主な利点は何ですか?Scala言語の欠点はありますか?
  6. Scala言語の主な欠点は何ですか?
  7. Scala言語の主なモットーは何ですか?
  8. 現在利用可能な人気のあるJVM言語は何ですか?
  9. Javaのjava.lang.Objectクラスのように、Scalaのすべてのクラスのスーパークラスは何ですか?
  10. Scalaでのデフォルトのアクセス修飾子は何ですか?Scalaには「public」キーワードがありますか?
  11. Scalaでの「型推論」とは何ですか?
  12. ScalaのIntとJavaのjava.lang.Integerの違いは何ですか?IntとRichIntの関係は何ですか?
  13. ScalaでのNothingとは何ですか?ScalaでのNilとは何ですか?NothingとNilの関係は何ですか?
  14. ScalaでのNullとは何ですか?Scalaでのnullとは何ですか?Nullとnullの違いは何ですか?
  15. ScalaでのUnitとは何ですか?JavaのvoidとScalaのUnitの違いは何ですか?
  16. valとvarの違いは何ですか?
  17. ScalaでのREPLとは何ですか?ScalaのREPLの用途は何ですか?CMDプロンプトからScalaのREPLにアクセスする方法は?
  18. Scalaの特徴は何ですか?
  19. 関数的にループを実装する方法は?OOPとFPスタイルのループの違いは何ですか?
  20. ScalaまたはScalaアプリケーションとは何ですか?ScalaのAppとは何ですか?ScalaのAppの用途は何ですか?
  21. Scalaは演算子オーバーロードをサポートしていますか?Javaは演算子オーバーロードをサポートしていますか?
  22. 式とは何ですか?文とは何ですか?式と文の違いは何ですか?
  23. Javaの「If…Else」とScalaの「If…Else」の違いは何ですか?
  24. Scalaは式ベースの言語ですか、文ベースの言語ですか?Javaは式ベースの言語ですか、文ベースの言語ですか?
  25. JavaでサポートされているがScalaでサポートされていない機能とその逆の機能をいくつか教えてください。
  26. Scalaでの関数とメソッドの違いは何ですか?
  27. Scalaソースファイルで定義できるpublicクラスファイルはいくつありますか?
  28. Javaと同様に、Scala言語でのデフォルトのインポートは何ですか?
  29. Scalaにはいくつの演算子があり、なぜですか?
  30. Javaで使用されるがScalaでは必要ないいくつかのキーワードを挙げてください。なぜScalaではそれらが必要ないのですか?
  31. ScalaにおけるPreDefとは何ですか?

前回の投稿を参照してください。詳細については、関数型プログラミングについて学びます(このリンクをクリックして前回の投稿を開く)。

Scalaのインタビューの質問と回答

このセクションでは、上記のリストから各質問を取り上げ、必要に応じて適切な例を使って詳細に議論します。これらの概念を例を交えて深く理解したい場合は、Scalaチュートリアルセクションの前の投稿をご覧ください。

Scalaとは何ですか?それは言語ですか、プラットフォームですか?OOPまたはFPをサポートしていますか?Scalaの父は誰ですか?

ScalaはSCAlable LAnguageの略です。Martin OderskyはScalaの生みの親です。Scalaはマルチパラダイムプログラミング言語であり、オブジェクト指向および関数型プログラミングの概念の両方をサポートしています。Martin Oderskyによって設計および開発されました。Scalaはタイプセーフなオブジェクト機能型プログラミングJVM言語です。ScalaはJVM(Java Virtual Machine)上で実行されます。Scalaはハイブリッド関数型(オブジェクト指向および関数型)プログラミングJVM言語です。Scalaは強力で静的な型システムを持っています。Scalaでは、すべての型がコンパイル時にチェックされます。

Scalaは静的型言語ですか?静的型言語とは何ですか?動的型言語とは何ですか?静的型言語と動的型言語の違いは何ですか?

はい、Scalaは静的型付け言語です。静的型付け言語とは、型チェックがコンパイル時にコンパイラによって行われることを意味します。この種の言語の主な利点は、開発者として、すべてのコンパイル時エラーを避けるために正しいコードを書くことに注意を払う必要があるということです。コンパイラが多くのエラーをコンパイル時にチェックするため、実行時に問題やバグがあまり発生しないことがあります。 :Java、Scala、C、C++、Haskellなどです。動的型付け言語とは、型チェックが実行時に行われることを意味します。コンパイラはコンパイル時に型チェックを行わないため、実行時により多くの問題やバグが発生する可能性があります。 :Groovy、JavaScript、Ruby、Python、Smalltalkなどです。

Scalaは純粋なOOP言語ですか?Javaは純粋なOOP言語ですか?

純粋なオブジェクト指向プログラミング言語とは、すべてがオブジェクトであることを意味します。Javaは純粋なオブジェクト指向プログラミング(OOP)言語ではありません。なぜなら、以下の2つの非OOPの概念をサポートしているからです:

  • Javaはプリミティブデータ型をサポートしています。これらはオブジェクトではありません。
  • Javaは静的メンバをサポートしています。これらはオブジェクトに関連していません。

はい、Scalaは純粋なオブジェクト指向プログラミング言語です。Scalaでは、すべてがオブジェクトであり、すべてが値です。関数は値であり、値はオブジェクトです。Scalaにはプリミティブデータ型も静的メンバもありません。

Scalaはすべての関数型プログラミングの概念をサポートしていますか?Java 8はすべての関数型プログラミングの概念をサポートしていますか?

はい、Scalaはすべての関数型プログラミング(FP)の概念をサポートしています。Java 8はいくつかの関数型プログラミングの構造を導入しましたが、すべての関数型プログラミングの概念をサポートしていません。たとえば、Java 8はパターンマッチング、関数カリー化、暗黙の型変換などをサポートしていません。

Scala言語の主な利点は何ですか?Scala言語の欠点はありますか?

アプリケーションの開発にScala言語を使用すると、以下の利点や欠点を得ることができます:Scala言語の利点:

  • シンプルで簡潔なコード
  • 非常に表現力があるコード
  • より読みやすいコード
  • 100%型安全言語
  • 不変性と副作用のないコード
  • より再利用可能なコード
  • よりモジュール化
  • コードを少なくしてください
  • 非常に柔軟な構文
  • すべてのOOP機能をサポート
  • すべてのFP機能をサポート。 高機能です。
  • エラーが少ないコード
  • より優れた並行および並列プログラミング
  • 高度にスケーラブルでメンテナブルなコード
  • 高度な生産性
  • 分散アプリケーション
  • 完全なJavaの相互運用性
  • 強力なScala DSLが利用可能
  • Scala基礎を学ぶためのREPL

Scala言語の欠点:

  • コードが少し読みづらい
  • 初心者がコードを理解するのが少し難しい
  • 学習する複雑な構文
  • 後方互換性が少ない

注意:Scalaコードは、より読みやすい方法またはより読みにくい方法で書くことができます。

Scala言語の主な欠点は何ですか?

Scalaの多くの利点に加えて、1つの大きな欠点があります。それは、後方互換性の問題です。最新バージョンのScalaにアップグレードしたい場合、パッケージ名、クラス名、メソッドや関数の名前などを変更する必要があります。例えば、古いScalaバージョンを使用していて、プロジェクトがBeanPropertyアノテーションを使用している場合、以前のバージョンでは「scala.reflect.BeanProperty」のように「scala.reflect」で利用できました。新しいScalaバージョンにアップグレードしたい場合、このパッケージを「scala.reflect」から「scala.beans」に変更する必要があります。

Scala言語の主なモットーは何ですか?

Javaのモットーが「一度書けばどこでも動く」であるのに対し、Scalaは「少ないコードで多くを実現する」というモットーを持っています。”Do More With Less”は、少ないコードでより複雑なプログラムやロジックを開発できることを意味します。

Java、Scala、Groovy、Closureは最も人気のあるJVM(Java Virtual Machine)言語です。Scala、Groovy、ClosureのJVM言語は、オブジェクト指向プログラミングの機能と関数型プログラミングの機能の両方をサポートしています。Java SE 8はすべてのオブジェクト指向プログラミングの機能をサポートしています。ただし、ラムダ式、関数、型推論、高階関数などの関数型プログラミングの機能はほとんどサポートしていません。

Javaのjava.lang.Objectクラスと同様に、Scalaのすべてのクラスのスーパークラスは何ですか?

Javaでは、すべてのクラス(Java APIクラスまたはユーザー定義クラス)のスーパークラスはjava.lang.Objectです。同様に、Scalaでは、すべてのクラスまたはトレイトのスーパークラスは「Any」クラスです。Anyクラスは、scalaパッケージに「scala.Any」として定義されています。

Scalaのデフォルトのアクセス修飾子は何ですか?Scalaには「public」キーワードがありますか?

Scalaでは、メソッド、関数、トレイト、オブジェクト、またはクラスにアクセス修飾子を指定しない場合、デフォルトのアクセス修飾子は「public」です。同様に、フィールドに対しても「public」がデフォルトのアクセス修飾子です。このデフォルトの特徴により、Scalaには「public」キーワードが存在しない。

Scalaにおける「型推論」は何ですか?

Scalaコンパイラはコンパイル時に型を推論することができます。これが「型推論」として知られています。ここでの「型」はデータ型または結果型を指します。Scalaプログラムでは、変数の型、オブジェクトの型、メソッド/関数のパラメータの型、メソッド/関数の戻り値の型など、さまざまな場所で型を使用します。単純に言えば、コンパイラがコンパイル時に変数や式、オブジェクトなどの型を判断することを「型推論」と呼びます。

ScalaのIntとJavaのjava.lang.Integerの類似点と相違点は何ですか?IntとRichIntの関係は何ですか?

ScalaのIntとJavaのjava.lang.Integerの類似点:

  • Both are classes.
  • Both are used to represent integer numbers.
  • Both are 32-bit signed integers.

ScalaのIntとJavaのjava.lang.Integerの違い:

  • ScalaのIntクラスはComparableインターフェースを実装していません。
  • Javaのjava.lang.IntegerクラスはComparableインターフェースを実装しています。

JavaのIntegerは、ScalaのIntおよびRichIntと類似しています。RichIntは”scala.runtime.RichInt”のようにscala.runtimeパッケージで定義された最終クラスです。ScalaでIntを使用すると、それがRichIntに自動的に変換され、そのクラスで利用可能なすべてのメソッドを利用できます。RichIntはIntの暗黙のクラスと言えます(次の投稿で「暗黙のものとその利点」について説明します)。

ScalaにおけるNothingとは何か?ScalaにおけるNilとは何か?ScalaにおけるNothingとNilの関係は何か?

Scalaでは、NothingはType(最終クラス)です。ScalaのType Systemの底で定義されており、つまりScalaのすべてのもののサブタイプです。Nothingのインスタンスはありません。ScalaでのNothingの使用例: Nothingにはインスタンスがない場合、Scalaアプリケーションでこれをいつ使用するのでしょうか?

  • NilはNothingを使用して定義されています(以下は例です)。
  • NoneはNothingを使用して定義されています。
object None extends Option[Nothing]
  • 我々は、絶対に戻らないメソッドの戻り値の型としてNothingを使用できます。
  • 我々は、異常終了するメソッドの戻り値の型としてNothingを使用できます。

Nilは空のリストを表すために使用されるオブジェクトです。以下に示すように、「scala.collection.immutable」パッケージで定義されています:

object Nil extends List[Nothing]

例:

scala> Nil
res5: scala.collection.immutable.Nil.type = List()

scala> Nil.length
res6: Int = 0

ScalaのNullとは?Scalaのnullとは何ですか?ScalaのNullとnullの違いは何ですか?

NullはScalaの型(最終クラス)です。Null型は「scala.Null」として「scala」パッケージで利用可能です。唯一のインスタンスはnullです。Scalaでは、「null」はscala.Null型のインスタンスです。例:

scala> val myNullRef : Null = null
myNullRef: Null = null

Null型の参照に他の値を割り当てることはできません。唯一の受け入れ可能な値は「null」です。Nullはすべての参照型のサブタイプです。NullはScala型システムの底にあります。Value型のサブタイプではないため、「null」を任意のValue型の変数に割り当てることができます。例:

scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
       val myInt : Int = null

^ ここで型不一致エラー。found:Null(null)が必要:Int。NullとIntの間の暗黙の変換は適用されません。それらは曖昧です。

ScalaにおけるUnitとは何ですか?JavaのvoidとScalaのUnitの違いは何ですか?

Scalaでは、Unitは「値なし」または「有用な値なし」を表すために使用されます。Unitは、”scala”パッケージ内で定義された最終クラスであり、”scala.Unit”です。UnitはJavaのvoidに類似していますが、いくつかの違いがあります。

  • Javaのvoidには値がありません。何もありません。
  • ScalaのUnitには1つの値()があります。
  • ()はScalaのUnit型の唯一の値です。ただし、Javaにはvoid型の値はありません。
  • Javaのvoidはキーワードです。ScalaのUnitは最終クラスです。

どちらも、メソッドや関数が何も返さないことを表すために使用されます。

Scalaにおけるvalとvarの違いは何ですか?

Scalaでは、valとvarの両方が変数を定義するために使用されます。ただし、それらにはいくつかの重要な違いがあります。

  • varは変数を意味します。
  • valは値を意味します。
  • 変数は変更可能であること、値は定数であることを知っています。
  • varは可変変数を定義するために使用され、これは一度作成されたら値を再割り当てできることを意味します。
  • valは不変変数を定義するために使用され、これは一度作成されたら値を再割り当てできません。
  • 単純なJava用語では、varは「変数」を意味し、valは「最終変数」を意味します。

ScalaにおけるREPLとは何ですか? ScalaのREPLの用途は何ですか? CMDプロンプトからScala REPLにアクセスする方法は?

REPLはRead-Evaluate-Print Loopの略で、”ripple”と発音できます。Scalaでは、REPLはScalaコードをコマンドプロンプトから実行するためのインタープリタとして機能します。そのため、REPLはScala CLI(Command Line Interface)またはScalaコマンドラインシェルとしても知られています。REPLの主な目的は、練習のために小さなScalaコードのスニペットを開発およびテストすることです。Scala初心者が基本プログラムを練習するのに非常に役立ちます。”scala”コマンドを使用してREPLにアクセスできます。CMDプロンプトで “scala” コマンドを入力すると、REPLシェルが表示され、Scalaコードを入力および実行できます。

D:\> scala

scala>

Scalaの特徴は何ですか?

Scala言語は次の機能をサポートしています:

  • オブジェクト指向スタイル(命令型スタイル)と関数型プログラミングの両方をサポートします。
  • 純粋なオブジェクト指向プログラミング言語です。
  • すべての関数型の機能をサポートしています。
  • REPL(Read-Evaluate-Print Loop)インタープリターです。
  • 強力な型システムです。
  • 静的型付け言語です。
  • 型推論をサポートしています。
  • パターンマッチングをサポートしています。
  • クロージャをサポートしています。
  • 永続データ構造をサポートしています。
  • 並行アプリケーションを開発するためにアクターモデルを使用します。
  • Javaとの互換性があります。
  • すべての開発ツールが利用可能です- IDE、ビルドツール、ウェブフレームワーク、TDDおよびBDDフレームワークです。

関数的にループを実装するにはどうすればよいですか? OOPとFPスタイルのループの違いは何ですか?

オブジェクト指向スタイルでは、ループを実装するために次の構造を使用します:

  • ループ構造
  • 可変性
  • 副作用

同じループを機能的な方法で異なる方法で実装できます。スレッドセーフです。ループを機能的なスタイルで実装するためには、次の2つのテクニックを使用できます。

  • 再帰
  • テール再帰
  • イミュータビリティ
  • 副作用なし

Scalaでの「アプリケーション」とは何ですか?Scalaの「App」とは何ですか?ScalaのAppの使用方法は?

Scalaアプリケーション: Scalaでは、Appは「scala.App」というscalaパッケージで定義されたトレイトです。 mainメソッドを定義します。オブジェクトまたはクラスがこのトレイトを拡張すると、Scala実行可能プログラムに自動的になります。これは、Applicationからmainメソッドを継承するためです。 Appを使用する主な利点は、mainメソッドを書く必要がないことです。 Appを使用する主な欠点は、scala.Appのmain()メソッドがこの名前を使用するため、「args」という同じ名前をコマンドライン引数を参照するために使用する必要があることです。例: Scala Appなし:

object MyApp {
    def main( args: Array[String]){
        println("Hello World!")
    }
}

Scala Appを使用する:

object MyApp extends App{
   println("Hello World!")
}

上記の2つの例を観察すると、2番目の例では、Scala App(Application)から継承しているため、mainメソッドを定義していません。Scala 2.9より前には、scala.Applicationトレイトがありました。ただし、Scala 2.9以降はscala.Appによって廃止されています。

Scalaはオペレーターのオーバーローディングをサポートしていますか? Javaはオペレーターのオーバーローディングをサポートしていますか?

Javaはオペレーターのオーバーローディングをサポートしていません。Scalaはオペレーターのオーバーローディングをサポートしています。その理由は、Javaが「+*/」のような誤解を招くメソッド名をサポートしたくないためです。Scalaは、どのメソッド/関数名を使用するかを開発者が決定する柔軟性を与えています。2 + 3を呼び出すということは、「+」がオペレーターではなく、Intクラス(またはその暗黙的な型)で使用可能なメソッドであるということです。内部的には、この呼び出しは「2.+(3)」に変換されます。

式とは何ですか? ステートメントとは何ですか? 式とステートメントの違いは何ですか?

表現: 表現とは、評価される値を意味します。式は値を返すため、変数に割り当てることができます。例:- ScalaのIf条件、Javaの三項演算子。ステートメント: ステートメントは1つ以上のアクションまたは操作を定義します。つまり、ステートメントはアクションを実行します。値を返さないため、変数に割り当てることはできません。例:- JavaのIf条件。

Javaの「If…Else」とScalaの「If…Else」の違いは何ですか?

Javaの「If…Else」: Javaでは、「If…Else」はステートメントであり、式ではありません。値を返さず、変数に割り当てることはできません。例:-

 int year;
 if( count == 0) 
   year = 2014;
 else 
   year = 2015;

Scalaの「If…Else」: Scalaでは、「If…Else」は式です。値を評価します。変数に割り当てることができます。

 val year = if( count == 0) 2014 else 2015

**注意:**Scalaの「If…Else」は、Javaの三項演算子のように機能します。Scalaの「If…Else」は、以下に示すようにJavaの「If…Else」ステートメントのように使用できます:

 val year = 0
 if( count == 0) 
   year = 2014 
 else 
   year = 2015

Scalaは式ベースの言語ですか、それとも文ベースの言語ですか?Javaは式ベースの言語ですか、それとも文ベースの言語ですか?

Scalaでは、すべてが値です。すべての式または文は値に評価されます。式、関数、クロージャ、オブジェクトなどを変数に代入できます。そのため、Scalaは式指向の言語です。一方でJavaでは、文は式または値ではありません。変数に代入することはできません。したがって、Javaは式指向の言語ではありません。文ベースの言語です。

JavaでサポートされているがScalaではサポートされていない特徴を教えてください。逆もまた然りです。

  • Javaはオペレーターオーバーローディングをサポートしていませんが、Scalaはサポートしています。
  • Javaは++および演算子をサポートしていますが、Scalaはサポートしていません。
  • Javaにはチェック済みおよび未チェックの例外がありますが、Scalaにはチェック済みの例外がありません。
  • Scalaはbreakとcontinue文をサポートしていませんが、Javaはそれらを使用します。
  • Scalaには明示的な型キャストがありませんが、Javaはこの機能をサポートしています。
  • Scalaはパターンマッチングをサポートしていますが、Javaはサポートしていません。
  • Javaはプリミティブデータ型を使用しますが、Scalaはありません。
  • Javaは静的メンバーをサポートしますが、Scalaには静的メンバーの概念がありません。
  • Scalaは暗黙的な変換とトレイトをサポートしますが、Javaはそれらをサポートしません。

**注意:**このリストは1ページを超えますが、ScalaとJavaの機能の違いについてScalaインタビューで直面する重要なポイントです。

Scalaで関数とメソッドの違いは何ですか?

Scalaは関数とメソッドの両方をサポートしています。関数とメソッドを定義するために同じ構文を使用しますが、構文の違いはありません。ただし、1つの小さな違いがあります:

  • Scalaクラスやトレイトでメソッドを定義することができます。メソッドはオブジェクト(クラスのインスタンス)に関連付けられています。クラスのインスタンスを使用してメソッドを呼び出すことができます。オブジェクトを使用せずにScalaメソッドを直接使用することはできません。
  • 関数はクラスやトレイトに関連付けられていません。Scalaパッケージで定義されています。Javaの静的メソッドのように、オブジェクトを使用せずに関数にアクセスすることができます。

注意:私の次の投稿で、クラス、トレイト、パッケージ、オブジェクトなどについて議論します。

Scalaソースファイルで定義可能なpublicクラスファイルはいくつありますか?

Javaでは、ソースファイルごとに最大1つのpublicクラス/インターフェースを定義できます。しかし、Scalaでは、同じソースファイル内で複数のpublicクラスをサポートしています。Scalaソースファイルでは、任意の数のpublicクラス/インターフェース/トレイトを定義できます。

Javaと同様に、Scala言語でのデフォルトのインポートは何ですか?

Javaの場合、java.langはJVMによって自動的にすべてのJavaプログラムにインポートされるデフォルトパッケージです。このパッケージを明示的にインポートする必要はありません。同様に、すべてのScalaプログラムで利用可能なデフォルトのインポートは次のとおりです:

  • java.langパッケージ
  • scalaパッケージ
  • scala.PreDef

Scalaにはどのくらいの演算子がありますか?そしてなぜですか?

Javaと異なり、C++のように、Scalaは演算子のオーバーローディングをサポートしています。Scalaには1つだけの演算子があります。それは「=」(等しい)演算子です。これ以外のすべてはメソッドです。たとえば、2 + 3という式では、「+」はScalaの演算子ではありません。「+」はIntクラスに存在するメソッドです。Scalaコンパイラは2と3が整数であることを認識し、「+」メソッドをIntクラスで探そうとします。そのため、Scalaコンパイラは「2 + 3」式を「2.+(3)」に変換し、「+」メソッドを整数オブジェクト「2」に対して呼び出し、整数オブジェクト「3」を「+」メソッドにパラメータとして渡します。 「2 + 3」と「2.+(3)」は等価です。これは、Scalaが関数型スタイルでプログラムを書くためのシンタックスシュガーです。

Javaで使用されているが、Scalaでは必要ないいくつかのキーワードを挙げてください。なぜScalaはそれらが必要ないのですか?

Javaは次のキーワードを広く使用しています:

  • 「public」キーワード – クラス、インターフェイス、変数などを定義するために使用されます。
  • 「static」キーワード – 静的メンバーを定義するために使用されます。

Scalaはこれらの2つのキーワードが必要ありません。Scalaには ‘public’ と ‘static’ のキーワードがありません。

  • Scalaでは、クラス、トレイト、メソッド/関数、フィールドなどのデフォルトのアクセス修飾子は ‘public’ です。そのため、 ‘public’ キーワードは必要ありません。
  • ScalaチームはOOPの原則をサポートするために ‘static’ キーワードを避けています。そのため、Scalaは純粋なOOP言語です。静的メンバーを並行性のアプリケーションで扱うのは非常に難しいです。

h3>ScalaのPreDefとは何ですか?ScalaのPreDefの主な目的は何ですか?Scalaでは、PreDefは “scala.PreDef” としてscalaパッケージで定義されたオブジェクトです。それはユーティリティオブジェクトです。以下に示すように、多くのユーティリティメソッドを定義しています:

  • Console IO(print、printlnなど)
  • コレクションのユーティリティメソッド
  • 文字列のユーティリティメソッド
  • 暗黙の変換メソッド
  • アサーションのユーティリティメソッドなど。

たとえば、print、println、readLine、readInt、requireなどのメソッドはPreDefオブジェクトに定義されています。Scalaでは、Scalaコンパイラがこのオブジェクトをすべてのコンパイルユニット(クラス、オブジェクト、トレイトなど)に自動的にインポートするため、Scalaプログラムのすべての場所でそのメソッドを使用できます。これが「Scala Basic Interview Questions and Answers」についてのすべてです。私の投稿が気に入ったり、問題や提案がある場合は、コメントを残してください。

Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers