スカラの面接の質問と回答
Scalaの面接問題と回答へようこそ。現在、ほとんどの金融/銀行、政府、電気通信、ソーシャルネットワーキングなどの企業は、Scala、Play、Akkaフレームワークを使用してプロジェクトを開発しています。これらのフレームワークは、OOPとFPの両方の機能をサポートし、多くの利点も提供しています。
Scalaの面接質問
私は、いくつかの投稿を通じて、私の面接の知識とScalaエコシステムまたはフルスタックScala(Scala/Play/Akka)開発の経験を共有しようと思います。私は3つの別々の投稿を共有します。いくつかの質問は1つの質問だけであり、いくつかの質問にはサブ質問があります。合計で約200の質問について話し合います。これらの質問に慣れているなら、必ずすべてのScala開発者の面接に合格することができると確信しています。ただし、フルスタックScala開発者として続けるつもりなら、これらのフルスタックScala技術を徹底的に学ぶ必要があります。
イントロダクション
3つのパーツに分けて、Scala/Play/Akkaのインタビューの質問と回答を提供します。
-
- Scala インタビューの質問と回答:
-
- ここでは、フレッシャーまたはJava開発者がScala開発に移行したい場合や、1年以上のScala開発経験がある場合に役立つ基本的なScalaインタビューの質問について議論します。2. Scala中級のインタビューの質問と回答:
-
- ここでは、2年以上のScala / Java開発者に役立つインタビューの質問について議論します。3. Scala上級のインタビューの質問と回答:
-
- ここでは、シニアまたは経験豊富なScala / Java開発者に役立つインタビューの質問について議論します。4. Scala / Javaの並行性と並列性のインタビューの質問と回答:
- ここでは、シニアまたは経験豊富なScala / Java開発者に役立つScala / Javaの並行性と並列性のインタビューの質問と回答を議論します。
私たちはまた、ScalaとJavaの構造の違いについても話し合いますので、JavaからScalaに移行するユーザーは、これらの投稿から利益を得ることができます。この投稿では、基本的なScalaのインタビューの質問について話し合います。残りの2つのセクションについては、私の次の投稿をお読みください。
Scalaの基本インタビューの質問
このセクションでは、すべてのScala基本インタビューの質問をリストアップし、次のセクションではそれらを詳細に議論します。
-
- Scalaとは何ですか?言語ですか、プラットフォームですか?OOPまたはFPをサポートしていますか?Scalaの父は誰ですか?
-
- Scalaは静的型付け言語ですか?静的型付け言語と動的型付け言語とは何ですか?静的型付け言語と動的型付け言語の違いは何ですか?
-
- Scalaは純粋なOOP言語ですか?Javaは純粋なOOP言語ですか?
-
- Scalaはすべての関数型プログラミングの概念をサポートしていますか?Java 8はすべての関数型プログラミングの概念をサポートしていますか?
-
- Scala言語の主な利点は何ですか?Scala言語の欠点はありますか?
-
- Scala言語の主な欠点は何ですか?
-
- Scala言語の主なモットーは何ですか?
-
- 現在利用可能な人気のあるJVM言語は何ですか?
-
- Javaのjava.lang.Objectクラスのように、Scalaのすべてのクラスのスーパークラスは何ですか?
-
- Scalaでのデフォルトのアクセス修飾子は何ですか?Scalaには「public」キーワードがありますか?
-
- Scalaでの「型推論」とは何ですか?
-
- ScalaのIntとJavaのjava.lang.Integerの違いは何ですか?IntとRichIntの関係は何ですか?
-
- ScalaでのNothingとは何ですか?ScalaでのNilとは何ですか?NothingとNilの関係は何ですか?
-
- ScalaでのNullとは何ですか?Scalaでのnullとは何ですか?Nullとnullの違いは何ですか?
-
- ScalaでのUnitとは何ですか?JavaのvoidとScalaのUnitの違いは何ですか?
-
- Scalaでのvalとvarの違いは何ですか?
-
- ScalaでのREPLとは何ですか?ScalaのREPLの利用方法は何ですか?CMDプロンプトからScalaのREPLにアクセスする方法はありますか?
-
- Scalaの特徴は何ですか?
-
- 関数とメソッドの違いは何ですか?
-
- Scalaソースファイルに定義できるpublicクラスファイルの数はいくつですか?
-
- Javaと同様に、Scala言語のデフォルトインポートは何ですか?
-
- Scalaにはいくつの演算子があり、なぜですか?
-
- Javaで使用されるいくつかのキーワードを挙げて、Scalaでは必要ありませんか?なぜScalaはそれらを必要としないのですか?
- ScalaでのPreDefとは何ですか?
関数型プログラミングについては、私の前の投稿を参照してください(前の投稿を開くにはリンクをクリックしてください)。
スカラの面接でよく聞かれる質問とその回答
このセクションでは、前のリストからそれぞれの質問を取り上げ、必要に応じて適切な例を用いて詳細に議論します。これらの概念を例を交えて深く理解したい場合は、Scalaチュートリアルセクションで私の以前の投稿をご覧ください。
スカラとは何ですか?それは言語ですか、それともプラットフォームですか?OOPまたはFPをサポートしていますか?スカラの生みの親は誰ですか?
スカラはSCAlable LAnguageの略です。マーティン・オーダースキー氏はスカラの生みの親です。スカラはオブジェクト指向プログラミングと関数型プログラミングの両方をサポートするマルチパラダイムプログラミング言語です。スカラはマーティン・オーダースキー氏によって設計・開発されました。スカラは型安全なオブジェクト・関数型プログラミングJVM言語です。スカラはJVM(Java仮想マシン)上で実行されます。スカラはハイブリッド関数型(オブジェクト指向と関数型)プログラミングJVM言語です。スカラは強力で静的な型システムを持っています。スカラでは、すべての型がコンパイル時にチェックされます。
Scalaは静的型付け言語ですか?静的型付け言語とは何ですか?動的型付け言語とは何ですか?静的型付けと動的型付けの違いは何ですか?
はい、Scalaは静的型付けの言語です。静的型付けとは、コンパイル時にコンパイラが型チェックを行うことを意味します。この種の言語の主な利点は、開発者として、コンパイル時のエラーを避けるために正しいコードを書く必要があるということです。コンパイラがコンパイル時に多くのエラーをチェックするため、実行時には多くの問題やバグが発生しません。例:Java、Scala、C、C++、Haskellなど。動的型付けの言語とは、型チェックがコンパイル時ではなく実行時に行われることを意味します。コンパイラはコンパイル時に型チェックを行わないため、実行時にはより多くの問題やバグが発生する可能性があります。例:Groovy、JavaScript、Ruby、Python、Smalltalkなど。
スカラは純粋なOOP言語ですか?ジャバは純粋なOOP言語ですか?
純粋なオブジェクト指向プログラミング言語とは、すべてがオブジェクトとして扱われることを意味します。Javaは純粋なオブジェクト指向プログラミング(OOP)言語ではありません。なぜなら、Javaは以下の2つの非OOP概念をサポートしているからです。
- Java supports primitive data types. They are not objects.
- Java supports Static members. They are not related to objects.
はい、Scalaは純粋なオブジェクト指向プログラミング言語です。なぜなら、Scalaでは全てがオブジェクトであり、全てが値であるからです。関数も値であり、値もオブジェクトです。Scalaにはプリミティブなデータ型も静的メンバーも存在しません。
Scalaはすべての関数型プログラミングの概念をサポートしていますか?Java 8はすべての関数型プログラミングの概念をサポートしていますか?
はい、Scalaはすべての関数型プログラミング(FP)の概念をサポートしています。Java 8は一部の関数型プログラミングの構造を導入しましたが、すべての関数型プログラミングの概念をサポートしているわけではありません。例えば、Java 8ではパターンマッチング、関数のカリー化、暗黙の型変換などはサポートされていません。
Scala言語の主な利点は何ですか?Scala言語の欠点はありますか?
Scala言語を使用してアプリケーションを開発すると、以下の利点やメリット、および欠点が得られます:Scala言語の利点:
- Simple and Concise Code
- Very Expressive Code
- More Readable Code
- 100% Type-Safe Language
- Immutability and No Side-Effects
- More Reusable Code
- More Modularity
- Do More With Less Code
- Very Flexible Syntax
- Supports all OOP Features
- Supports all FP Features. Highly Functional.
- Less Error Prone Code
- Better Parallel and Concurrency Programming
- Highly Scalable and Maintainable code
- Highly Productivity
- Distributed Applications
- Full Java Interoperability
- Powerful Scala DSLs available
- REPL to learn Scala Basics
スカラ言語の欠点:
- Less Readable Code
- Bit tough to Understand the Code for beginners
- Complex Syntax to learn
- Less Backward Compatibility
注意:私たちはスカラコードを、より読みやすい方法あるいは読みにくい方法のいずれかで記述することができます。
Scala言語の主な欠点は何ですか?
Scalaの多くの利点に加えて、1つだけ大きな欠点があります: 互換性の問題です。最新バージョンのScalaにアップグレードしたい場合、パッケージ名、クラス名、メソッド名などを変更する必要があります。たとえば、古いScalaバージョンを使用しており、プロジェクトでBeanPropertyアノテーションを使用している場合、これは古いバージョンでは「scala.reflect.BeanProperty」という形で「scala.reflect」に存在していました。新しいScalaバージョンにアップグレードしたい場合、このパッケージを「scala.reflect」から「scala.beans」に変更する必要があります。
スカラ言語の主なモットーは何ですか?
Javaのモットー「Write Once Run Anywhere」のように、Scalaにも「少ないコードでより多くを行う」というモットーがあります。「少ないコードでより多くを行う」とは、少ないコードでより複雑なプログラムやロジックを開発できるという意味です。
現在人気のあるJVM言語は何ですか? (Genzai ninki no aru JVM gengo wa nan desu ka?)
Java、Scala、Groovy、Closureは、最も人気のあるJVM(Java Virtual Machine)言語です。Scala、Groovy、ClosureのJVM言語は、オブジェクト指向プログラミングの特徴と関数型プログラミングの特徴の両方をサポートしています。Java SE 8は、すべてのオブジェクト指向プログラミングの特徴をサポートしています。ただし、Lambda式や関数、型推論、高階関数など、関数型プログラミングの特徴はほとんどサポートしていません。
Javaのjava.lang.Objectクラスのように、Scalaのすべてのクラスのスーパークラスは何ですか?
私たちがJavaで知っているように、すべてのクラス(Java APIクラスまたはユーザー定義クラス)のスーパークラスはjava.lang.Objectです。同じように、Scalaでもすべてのクラスまたはトレイトのスーパークラスは「Any」クラスです。「Any」クラスは「scala.Any」というパッケージで定義されています。
Scalaにおけるデフォルトアクセス修飾子は何ですか?Scalaには”public”キーワードがありますか?
Scalaでは、メソッド、関数、トレイト、オブジェクト、またはクラスにアクセス修飾子を指定しない場合、デフォルトのアクセス修飾子は「public」です。フィールドに対しても同様で、「public」がデフォルトのアクセス修飾子です。このデフォルトの機能のため、Scalaには「public」というキーワードはありません。
Scalaにおける「型推論」とは何ですか?
スカラコンパイラによって、型はコンパイル時に推論されます。これは「型推論」として知られています。型とは、データ型または結果型を意味します。変数の型、オブジェクトの型、メソッド/関数のパラメータの型、メソッド/関数の戻り値の型など、Scalaプログラムの多くの場所で型を使用します。簡単に言えば、変数や式、オブジェクトなどの型をコンパイル時にコンパイラが判断することが「型推論」として知られています。
ScalaのIntとJavaのjava.lang.Integerの類似点と相違点は何ですか?また、Scalaの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’s Int class does not implement Comparable interface.
- Java’s java.lang.Integer class implements Comparable interface.
JavaのIntegerは、ScalaのIntとRichIntに似たものです。RichIntは、scala.runtimeパッケージで定義されたfinalクラスで、「scala.runtime.RichInt」というように指定されます。Scalaにおいて、IntとRichIntの関係は、ScalaプログラムでIntを使用すると、自動的にそれをRichIntに変換して、そのクラスで利用可能なすべてのメソッドを利用するというものです。RichIntはIntの暗黙のクラスとも言えます。(次の投稿で「暗黙のクラスとは何か、および暗黙のクラスの利点について」議論します)。
ScalaにおけるNothingとは何ですか?ScalaにおけるNilとは何ですか?ScalaにおけるNothingとNilの関係はどうなっていますか?
Scalaにおいて、Nothingは型(最終クラス)です。Scalaの型システムの最下部に定義されており、つまりScalaのどんなもののサブタイプでもあります。Nothingのインスタンスは存在しません。ScalaにおけるNothingの使用例:- Nothingにはインスタンスが存在しないので、いつScalaアプリケーションで使用するのでしょうか?
- Nil is defined using Nothing (See below for example).
- None is defined using Nothing.
object None extends Option[Nothing]
- We can use Nothing as a return type of methods which never return.
- We can use Nothing as a return type of methods which terminates abnormally.
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とは何ですか?Nullとnullの違いは何ですか?
NullはScalaでのタイプ(finalクラス)です。Nullタイプは、scalaパッケージ内の”scala.Null”として利用可能です。Nullタイプにはnullという唯一のインスタンスがあります。Scalaでは、”null”はscala.Nullタイプのインスタンスです。例:
scala> val myNullRef : Null = null
myNullRef: Null = null
Null型の参照には他の値を割り当てることができません。Null型の参照は「null」の値のみを受け入れます。Nullはすべての参照型のサブタイプです。NullはScalaの型システムの最下層に位置しています。Nullは値型のサブタイプではないため、値型の変数に対しては「null」を割り当てることができます。例:
scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
val myInt : Int = null
ここでタイプミスマッチエラーが発生しました。Null(null)が見つかりましたが、必要なのはIntです。NullとIntの間の暗黙の変換は適用できません。なぜなら、それらは曖昧です。
ScalaでのUnitとは何ですか?JavaのvoidとScalaのUnitの違いは何ですか?
Scalaでは、Unitは「値がない」または「有用な値がない」ということを表すために使用されます。Unitは、scalaパッケージで定義された最終的なクラスであり、「scala.Unit」です。Unitは、Javaのvoidに類似していますが、いくつかの違いがあります。
- Java’s void does not any value. It is nothing.
- Scala’s Unit has one value ()
- () is the one and only value of type Unit in Scala. However, there are no values of type void in Java.
- Java’s void is a keyword. Scala’s Unit is a final class.
両者は、方法や関数が何も返さないことを表すために使用されます。
Scalaにおいて、valとvarの違いは何ですか?
Scalaでは、変数を定義するためにvalとvarの両方が使用されますが、それらにはいくつかの重要な違いがあります。
- var stands for variable.
- val stands for value.
- As we know, variable means changeable and value means constant.
- var is used to define Mutable variables that means we can reassign values once its created.
- val is used to define Immutable variables that means we cannot reassign values once its created.
- In simple Java terminology, var means ‘variable’ and val means ‘final variable’.
ScalaのREPLとは何ですか?ScalaのREPLの使用方法は?CMDプロンプトからScalaのREPLにアクセスする方法は?
REPL(リプル)はRead-Evaluate-Print Loopの略です。Scalaでは、REPLはコマンドプロンプトからScalaコードを実行するためのインタープリタとして機能します。そのため、REPLはScala CLI(Command Line Interface)またはScalaコマンドラインシェルとも呼ばれています。REPLの主な目的は、練習のためにScalaコードの小さなスニペットを開発・テストすることです。Scala初心者にとって基本的なプログラムの練習に非常に役立ちます。REPLには「scala」というコマンドを使用してアクセスすることができます。CMDプロンプトで「scala」と入力すると、Scalaコードを入力して実行できるREPLシェルが表示されます。
D:\> scala
scala>
Scalaの特徴は何ですか?
「Scala言語は、以下の機能をサポートしています。」
- Supports both OOP-style(Imperative-Style) and Functional-Style Programming
- Pure Object-Oriented Programming Language
- Supports all Functional Features
- REPL(Read-Evaluate-Print Loop) Interpreter
- Strong Type System
- Statically-Typed Language
- Type Inference
- Supports Pattern Matching
- Supports Closures
- Supports Persistent Data Structures
- Uses Actor Model to develop Concurrency Applications
- Interoperable with Java
- Available all development tools – IDEs, Build Tools, Web Frameworks, TDD and BDD Frameworks
関数型プログラミングでループを実装する方法はどのようなものですか? オブジェクト指向プログラミングと関数型プログラミングのスタイルのループにはどのような違いがありますか?
オブジェクト指向スタイルでループを実装する方法はわかります。可変な一時変数を使用して変数の値を更新し、ループの構造を利用します。この方法は非常に手間がかかり、安全ではありません。スレッドセーフではありません。オブジェクト指向スタイルでは以下の構造を使用してループを実装します。
- Loop Constructs
- Mutability
- Side Effects
私たちは同じループを機能的な方法で異なる方法で実装することができます。それはスレッドセーフです。私たちは以下の2つのテクニックを使用して、関数スタイルでループを実装することができます。
- Recursion
- Tail-Recursion
- Immutability
- No Side-Effects
「Scala」における「Application」とは、どのような意味ですか?また、「Scala Application」とは何ですか?「Scala」における「App」とは何ですか?Scalaの「App」の使用目的は何ですか?
Scalaアプリケーション:Scalaでは、「scala.App」という名前のパッケージ内に定義されるtrait「App」があります。これはmainメソッドを定義します。もしオブジェクトやクラスがこのtraitを継承すると、自動的にScala実行可能プログラムとして扱われます。Appを使用する主な利点は、mainメソッドを書かなくても良いことです。しかし欠点としては、scala.Appのmain()メソッドはコマンドライン引数を参照するために「args」という名前を使用しなければならないことです。例:Scala Appを使わない場合:
object MyApp {
def main( args: Array[String]){
println("Hello World!")
}
}
スカラアプリであれば:
object MyApp extends App{
println("Hello World!")
}
上記の2つの例を観察すると、2番目の例ではメインメソッドを定義していないため、Scala App(アプリケーション)から継承しています。Scala 2.9以前では、scala.Applicationトレイトがありましたが、Scala 2.9以降では非推奨となっています。
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;
スカラの「If…Else」: スカラでは、「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 does not support Operator Overloading, but Scala supports it.
- Java supports ++ and — operators , but Scala does not support them.
- Java has Checked and Unchecked Exceptions, but Scala does not have Checked Exceptions.
- Scala does not support break and continue statements, but Java uses them.
- Scala does not have explicit Type casting, but Java supports this feature.
- Scala supports Pattern Matching, but Java does not.
- Java uses Primitive Data types, but Scala does not have.
- Java supports static members, but Scala does not have static members concept.
- Scala supports Implicits and Traits, Java does not support them.
**注意:**このリストは1ページを超えています。ただし、ScalaとJavaの特徴の違いについて、Scalaのインタビューに臨む際に覚えておくべき重要なポイントです。
Scalaにおいて、「Function」と「Method」の違いは何ですか?
スカラは関数とメソッドの両方をサポートしています。関数とメソッドの定義には同じ構文を使用し、構文の違いはありません。ただし、少し異なる点があります。
- We can define a method in a Scala class or trait. Method is associated with an object (An instance of a Class). We can call a method by using an instance of a Class. We cannot use a Scala Method directly without using object.
- Function is not associated with a class or trait. It is defined in a Scala Package. We can access functions without using objects, like Java’s Static Methods.
私の次の投稿では、クラス、トレイト、パッケージ、オブジェクトなどについて話し合います。
Scalaのソースファイルで定義できる公開クラスファイルの数はいくつですか?
Javaでは、ソースファイル内に最大で1つの公開クラス/インターフェースを定義することができます。一方、Scalaでは、同じソースファイル内で複数の公開クラスをサポートしています。Scalaのソースファイルでは、任意の数の公開クラス/インターフェース/トレイトを定義することができます。
Javaと同様に、Scala言語におけるデフォルトのインポートはどれですか?
私たちは、java.langはJVMによって自動的にすべてのJavaプログラムにインポートされるデフォルトのパッケージであることを知っています。明示的にこのパッケージをインポートする必要はありません。同様に、以下のものはすべてのScalaプログラムで使用できるデフォルトのインポートです。
- java.lang package
- scala package
- scala.PreDef
Scalaには何人のオペレータがいて、なぜですか?
Javaとは異なり、C++と同様に、Scalaは演算子のオーバーロードをサポートしています。Scalaには、「=」(等号)演算子という唯一の演算子があります。他の演算子はすべてメソッドです。たとえば、2 + 3という場合、Scalaでは「+」は演算子ではありません。ScalaのIntクラスに利用可能なメソッドとなります。「Scalaコンパイラは2と3が整数であることを認識し、Intクラス内で「+」メソッドを探します。そのため、Scalaコンパイラは「2 + 3」という式を「2.+(3)」に変換し、整数オブジェクト「2」上で「+」メソッドを呼び出し、パラメータとして整数オブジェクト「3」を渡します。「2 + 3」と「2.+(3)」は同じです。これは単にScalaの構文糖として、関数型スタイルでプログラムを記述するためのものです。」
JavaとScalaで使用されるが、Scalaでは必要ないキーワードについていくつか挙げてみましょう。なぜScalaはそれらを必要としないのでしょうか?
Javaは以下のキーワードを広範に使用します:
- ‘public’ keyword – to define classes, interfaces, variables etc.
- ‘static’ keyword – to define static members.
Scalaはこれらの2つのキーワードを必要としません。Scalaには「public」および「static」というキーワードはありません。
- In Scala, default access modifier is ‘public’ for classes,traits, methods/functions, fields etc. That’s why, ‘public’ keyword is not required.
- To support OOP principles, Scala team has avoided ‘static’ keyword. That’s why Scala is a Pure-OOP Langauge. It is very tough to deal static members in Concurrency applications.
ScalaにおけるPreDefとは何ですか?PreDefの主な目的は何ですか?Scalaでは、PreDefは「scala.PreDef」という名前のscalaパッケージに定義されたオブジェクトです。これはユーティリティオブジェクトであり、以下に示すように多くのユーティリティメソッドを定義しています。
- Console IO (print,println etc)
- Collection utility methods
- String utility methods
- Implicit conversion methods
- Assertion utility methods etc.
例えば、print、println、readLine、readInt、requireなどのメソッドはPreDefオブジェクトで定義されています。Scalaでは、PreDefオブジェクトはすべてのScalaプログラムでimportする必要なく、そのメソッドを使用できます。なぜなら、Scalaコンパイラがこのオブジェクトをすべてのコンパイルユニット(クラス、オブジェクト、トレイトなど)に自動的にインポートするからです。以上が「Scalaの基本的なインタビューの質問と回答」についての全てです。今後の投稿では、中級、上級、リアルタイムのScalaのインタビューの質問と回答についても話し合います。もし投稿が気に入ったり、問題や提案がある場合はコメントをください。