検索

このページでは、Scala の基本について説明します。

ブラウザで Scala を試してみる

ブラウザの ScalaFiddle で Scala を実行できます。

  1. https://scalafiddle.ioを開きます

  2. 左ペインにprintln("Hello, world!")を貼り付けますprintln("Hello, world!")

  3. 点击“运行”按钮。 输出显示在右窗格中。

这是一个简单的,零设置的方式来测试Scala代码片段。

表达式

表达式是可计算的语句。

1 + 1

你可以使用 println 输出表达式的结果。

println(1) // 1
println(1 + 1) // 2
println("Hello!") // Hello!
println("Hello," + " world!") // Hello, world!

你可以使用 val 关键字来命名表达式的结果。

val x = 1 + 1println(x) // 2

命名结果,比如这里的 x,称为值。引用一个值并不会重新计算它。

值不能被重新分配。

val x = 1 + 1x = 3 // This does not compile.

编译器可以推断出类型的值,但是您也可以显式地声明类型,如下所述:

val x: Int = 1 + 1

注意,类型声明 Int 是在标识符 x 之后出现的,并且还需要在两者之间添加一个 :

变量

变量就像值,但你可以重新分配它们。你可以使用 var 关键字定义一个变量。

var x = 1 + 1x = 3 // This compiles because "x" is declared with the "var" keyword.
println(x * x) // 9

与值一样,你可以显式地声明类型:

var x: Int = 1 + 1

代码块

你可以把周围的表达式结合起来。我们称这个为代码块。

块的最后一个表达式的结果也是整个块的结果。

println({
  val x = 1 + 1
  x + 1
}) // 3

函数

函数是带参数的表达式。

你可以定义一个匿名函数(也就是没有名称),它返回一个给定的整数+1:

(x: Int) => x + 1

在推出符号 => 左边是一个参数列表。右边是一个包含参数的表达式。

你也可以命名函数。

val addOne = (x: Int) => x + 1
println(addOne(1)) // 2

函数可以使用多个参数。

val add = (x: Int, y: Int) => x + y
println(add(1, 2)) // 3

或者它不需要参数。

val getTheAnswer = () => 42
println(getTheAnswer()) // 42

方法

方法看起来和函数非常相似,但是它们之间有一些关键的区别。

方法使用 def 关键字定义。def 后面是方法名、参数列表、一个返回类型和一个主体。

def add(x: Int, y: Int): Int = x + y
println(add(1, 2)) // 3

注意返回类型是在参数列表和冒号 : Int 之后声明的。

方法可以使用多个参数列表。

def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
println(addThenMultiply(1, 2)(3)) // 9

或者根本没有参数列表。

def name: String = System.getProperty("name")
println("Hello, " + name + "!")

还有一些其他的区别,但是现在,你可以把它们看作是类似于函数的东西。

方法也可以有多行表达式。

def getSquareString(input: Double): String = {
  val square = input * input
  square.toString
}

body 的最后一个表达式是该方法的返回值。(Scala有一个返回关键字 return,但很少用到。)

你可以使用类关键字 class 定义类,然后使用它的名称和构造函数参数。

class Greeter(prefix: String, suffix: String) {
  def greet(name: String): Unit =
    println(prefix + name + suffix)
}

方法 greet 的返回类型是 Unit,它表示返回没有任何意义。它类似于Java和c中的关键字 void (不同之处在于,因为每个Scala表达式都必须有一定的值,所以实际上有一个类型 Unit 的单例值,写为 ()。它不携带任何信息。)

你可以使用关键字 new 来创建一个类的实例。

val greeter = new Greeter("Hello, ", "!")
greeter.greet("Scala developer") // Hello, Scala developer!

之后我们将详细介绍类。

样例类

Scala有一种特殊类型的类,称为“样例”类。默认情况下,样例类是不可变的,并按值进行比较。

你可以用 case class 关键字定义样例类。

case class Point(x: Int, y: Int)

您可以不需要使用 new 关键字来实例化样例类。

val point = Point(1, 2)
val anotherPoint = Point(1, 2)
val yetAnotherPoint = Point(2, 2)

它们是按值进行比较的。

if (point == anotherPoint) {
  println(point + " and " + anotherPoint + " are the same.")
} else {
  println(point + " and " + anotherPoint + " are different.")
}
// Point(1,2) and Point(1,2) are the same.
if (point == yetAnotherPoint) {
  println(point + " and " + yetAnotherPoint + " are the same.")
} else { 
  println(point + " and " + yetAnotherPoint + " are different.")
}
// Point(1,2) and Point(2,2) are different.

我们想要介绍的样例类还有很多,我们相信你会爱上它们的!之后我们将详细介绍它们。

对象

对象是它们自己定义的单个实例。你可以把他们想象成他们自己的类的单例。

你可以通过使用关键字 object 来定义对象。

object IdFactory {  
  private var counter = 0 
  def create(): Int = { 
    counter += 1    
    counter
  }
}

你可以通过引用对象名来访问一个对象。

val newId: Int = IdFactory.create()
println(newId) // 1
val newerId: Int = IdFactory.create()
println(newerId) // 2

稍后我们将详细介绍对象。

特质

特征是包含某些字段和方法的类型。多个特征可以组合在一起。

你可以通过使用关键字 trait 来定义特质。

trait Greeter { 
  def greet(name: String): Unit
}

特征也可以有默认的实现。

trait Greeter {
  def greet(name: String): Unit = 
    println("Hello, " + name + "!")
}

您可以使用 extends 关键字扩展特性,并使用 override 关键字覆盖实现。

class DefaultGreeter extends Greeter
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter { 
  override def greet(name: String): Unit = {    
    println(prefix + name + postfix)
  }
}
val greeter = new DefaultGreeter()
greeter.greet("Scala developer") // Hello, Scala developer!
val customGreeter = new CustomizableGreeter("How are you, ", "?")
customGreeter.greet("Scala developer") // How are you, Scala developer?

在这里,DefaultGreeter 只扩展了一个单一的特质,但是它可以扩展多个特质。

稍后我们将详细介绍特质。

主方法

主方法是一个程序的入口点。Java虚拟机需要一个命名为 main

「実行」ボタンをクリックします。 出力は右側のペインに表示されます。 🎜🎜🎜これは、Scala コード スニペットをテストするためのシンプルでセットアップ不要の方法です。 🎜🎜式🎜🎜式は計算可能なステートメントです。 🎜
object Main {  
  def main(args: Array[String]): Unit = 
    println("Hello, Scala developer!")
}
🎜 println を使用して式の結果を出力できます。 🎜rrreee

Value

🎜 val キーワードを使用して、式の結果に名前を付けることができます。 🎜rrreee🎜ここでの x のような名前付きの結果は、値と呼ばれます。値を参照しても再計算はされません。 🎜🎜値を再割り当てすることはできません。 🎜rrreee🎜コンパイラは値の型を推論できますが、次のように型を明示的に宣言することもできます: 🎜rrreee🎜型宣言 Int が識別子 x の後に表示され、この 2 つの間に <code>: を追加する必要があります。 🎜

変数

🎜 変数は値に似ていますが、再割り当てすることができます。 var キーワードを使用して変数を定義できます。 🎜rrreee🎜値と同様に、型を明示的に宣言できます: 🎜rrreee🎜コードブロック🎜🎜周囲の式を組み合わせることができます。これをコードブロックと呼びます。 🎜🎜ブロックの最後の式の結果は、ブロック全体の結果でもあります。 🎜rrreee🎜関数🎜🎜 関数とは、パラメーターを含む式です。 🎜🎜指定された整数 + 1 を返す匿名関数 (つまり、名前なし) を定義できます: 🎜rrreee🎜 左側の起動シンボル => にはパラメーター リストがあります。右側はパラメータを含む式です。 🎜🎜関数に名前を付けることもできます。 🎜rrreee🎜 関数は複数のパラメータを取ることができます。 🎜rrreee🎜 またはパラメータを必要としません。 🎜rrreee🎜メソッド🎜🎜メソッドは関数に非常に似ていますが、それらの間にはいくつかの重要な違いがあります。 🎜🎜メソッドは、def キーワードを使用して定義されます。 def の後には、メソッド名、パラメータ リスト、戻り値の型、および本文が続きます。 🎜rrreee🎜戻り値の型はパラメータ リストとコロン : Int の後に宣言されていることに注意してください。 🎜🎜メソッドは複数のパラメータリストを取ることができます。 🎜rrreee🎜 またはパラメータリストがまったくありません。 🎜rrreee🎜他にもいくつか違いがありますが、今のところは関数に似たものと考えることができます。 🎜🎜メソッドには複数行の式を含めることもできます。 🎜rrreee🎜 body の最後の式がこのメソッドの戻り値です。 (Scala には戻りキーワード return がありますが、ほとんど使用されません。) 🎜🎜クラス🎜🎜クラスキーワード class を使用してクラスを定義し、その名前とコンストラクターのパラメーター。 🎜rrreee🎜メソッド greet の戻り値の型は Unit です。これは、戻り値に意味がないことを意味します。これは、Java や C のキーワード void に似ています (違いは、すべての Scala 式には特定の値が必要であるため、実際には型 Unit > シングルトン値が存在することです。は () として記述されます。情報は含まれません)🎜🎜 キーワード new を使用してクラスのインスタンスを作成できます。 🎜rrreee🎜クラスについては後ほど詳しくご紹介します。 🎜🎜サンプルクラス🎜🎜 Scala には、「サンプル」クラスと呼ばれる特別なタイプのクラスがあります。デフォルトでは、サンプル クラスは不変であり、値によって比較されます。 🎜🎜 case class キーワードを使用してケース クラスを定義できます。 🎜rrreee🎜サンプル クラスをインスタンス化するために new キーワードを使用する必要はありません。 🎜rrreee🎜それらは値によって比較されます。 🎜rrreee🎜他にも紹介したいサンプル クラスがたくさんあります。きっと気に入っていただけると思います。後ほど詳しくご紹介します。 🎜🎜オブジェクト🎜🎜オブジェクトは、独自の定義の単一インスタンスです。これらは、独自のクラスのシングルトンと考えることができます。 🎜🎜キーワード object を使用してオブジェクトを定義できます。 🎜rrreee🎜名前を参照することでオブジェクトにアクセスできます。 🎜rrreee🎜オブジェクトについては後ほど詳しくご紹介します。 🎜🎜Traits🎜🎜Traits は、特定のフィールドとメソッドを含むタイプです。複数の機能を組み合わせることができます。 🎜🎜キーワード trait を使用して特性を定義できます。 🎜rrreee🎜機能にはデフォルトの実装を含めることもできます。 🎜rrreee🎜 extends キーワードを使用して機能を拡張し、override キーワードを使用して実装をオーバーライドできます。 🎜rrreee🎜 ここで、DefaultGreeter は 1 つのトレイトのみを拡張しますが、複数のトレイトを拡張することができます。 🎜🎜特徴については後ほど詳しくご紹介します。 🎜🎜Main メソッド🎜🎜 main メソッドは、プログラムのエントリ ポイントです。 Java 仮想マシンには、main という名前の main メソッドが必要で、1 つのパラメータである文字列配列を受け入れます。 🎜🎜オブジェクトを使用して、次のように main メソッドを定義できます: 🎜
object Main {  
  def main(args: Array[String]): Unit = 
    println("Hello, Scala developer!")
}

                                                



以上が[Tour of Scala] 2-基本 - TOUR OF SCALAの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境