目次
ブラウザで Scala を試してみる
表达式
变量
代码块
函数
方法
样例类
对象
特质
主方法
Value
変数
ホームページ バックエンド開発 PHPチュートリアル [Tour of Scala] 2-基本 - TOUR OF SCALA

[Tour of Scala] 2-基本 - TOUR OF SCALA

Mar 30, 2018 pm 02:20 PM
scala

このページでは、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 までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang と Scala の言語機能の違い Golang と Scala の言語機能の違い Jun 02, 2024 pm 01:17 PM

Go と Scala の言語機能の違いは次のとおりです。 型システム: Go は静的型システムを使用しますが、Scala は混合型システムを使用します。同時実行性: Go は軽量の goroutines に基づいていますが、Scala は Akka ベースのアクター モデルを使用します。ジェネリック: Go は実験的なジェネリック機能を提供しますが、Scala には成熟したジェネリック システムがあります。関数型プログラミング: Scala は関数型プログラミングの影響を受けており、パターン マッチングと高次関数をサポートしていますが、Go は一部の関数型プログラミングの概念のみをサポートしています。エコシステム: Go エコシステムは巨大ですが、Scala は比較的小規模です。

Java と Scala がオブジェクト指向プログラミングを実装する方法 Java と Scala がオブジェクト指向プログラミングを実装する方法 May 07, 2023 pm 01:46 PM

Scalaパッケージ: 基本構文: パッケージ名. クラス名 Scalaパッケージの3大機能: 同じ名前のクラスを区別する クラス数が多い場合、クラス制御のアクセス範囲をうまく管理できる パッケージ名の命名規則: 一般に小文字英字+小文字 ドットコム.会社名.プロジェクト名.業務モジュール名 パッケージを書くメリット:Mavenでは、書いたパッケージをMaven経由でプロジェクトにインポートできる Scala独自のパッケージ書き方はフォルダに対応していない独立して存在することができます. 下の図はクラスの下に構築したパッケージです. 通常のパッケージと同様に、パッケージを使用してネストすることができます. 内側の層は外側の層を呼び出し、パッケージをインポートする必要はありません. Atguigu パッケージは外側の層を使用してTecher の下の内部オブジェクトを呼び出し、パッケージをインポートする必要があります。次のコード: packagechapter04o

Java 関数と Scala 言語関数の違いは何ですか? Java 関数と Scala 言語関数の違いは何ですか? Apr 23, 2024 pm 12:39 PM

Java 関数と Scala 関数には構文とセマンティクスに違いがあります。Java 関数は戻り値の型を明示的に指定しますが、Scala はそれを省略できます。Java は末尾再帰をサポートしませんが、Java はパラメータと戻り値の型を明示的に宣言する必要があります。 Scala はコンパイラ推論によって使用できます。

Redis と Scala を使用してリアルタイム データ分析アプリケーションを構築する Redis と Scala を使用してリアルタイム データ分析アプリケーションを構築する Jul 30, 2023 pm 01:10 PM

Redis と Scala を使用したリアルタイム データ分析アプリケーションの構築 ビッグ データ時代の到来により、リアルタイム データ分析はさまざまな業界でますます重要になっています。リアルタイム データ分析アプリケーションを構築する場合、適切なテクノロジー スタックを選択することが重要です。 Redis は強力なインメモリ データベースであるのに対し、Scala は強力で柔軟なプログラミング言語です。この記事では、Redis と Scala を使用してリアルタイム データ分析アプリケーションを構築する方法を紹介し、コード例を通じてその実装プロセスを示します。まず、インストールして設定する必要があります

MySQL を使用して Scala でデータ集約操作を実装する方法 MySQL を使用して Scala でデータ集約操作を実装する方法 Jul 29, 2023 pm 09:12 PM

MySQL を使用して Scala でデータ集約操作を実装する方法 はじめに: MySQL は非常に人気のあるリレーショナル データベース管理システムであり、Scala は強力なプログラミング言語であり、この 2 つを組み合わせることでデータ集約操作を実装できます。この記事では、MySQL と Scala を使用してデータ集計操作を実行する方法を、対応するコード例とともに紹介します。 1. MySQL データベースに接続する Scala で MySQL データベースに接続するには、JDBC ドライバーを使用する必要があります。まず必要なのは、

Vue.js と Scala 言語を使用して大規模なデータ処理ソリューションを開発する方法 Vue.js と Scala 言語を使用して大規模なデータ処理ソリューションを開発する方法 Jul 31, 2023 pm 10:33 PM

Vue.js と Scala 言語を使用して大規模データ処理ソリューションを開発する方法 はじめに: ビッグ データ時代の到来により、大規模データを処理する必要がある企業や組織がますます増えています。この需要を満たすために、開発者は高度なテクノロジーとツールを活用して膨大なデータセットを処理する必要があります。 Vue.js 言語と Scala 言語は 2 つの非常に強力なツールであり、それぞれフロントエンド開発とバックエンド開発に優れています。この記事では、Vue.js と Scala 言語を使用して大規模なデータ処理ソリューションを開発する方法を紹介します。

Java Scala で暗黙的な変換を使用する方法 Java Scala で暗黙的な変換を使用する方法 May 14, 2023 pm 04:46 PM

暗黙的な変換は、Scala コンパイラーが型マッチングを実行するときに行われます。適切な型が見つからない場合、暗黙的な変換により、コンパイラーはスコープ内で適切な型を自動的に推測できます。 1. 暗黙的な値と暗黙的なパラメータ 暗黙的な値とは、パラメータを定義するときにパラメータの前に暗黙的な値を追加することを指します。暗黙的パラメーターとは、メソッドを定義するときに、メソッド内の一部のパラメーターが暗黙的に変更されることを意味します [カリー化を使用する必要があり、暗黙的パラメーターは最後に括弧内に記述する必要があります]。暗黙的な変換の機能は次のとおりです: メソッドを呼び出すときに、メソッド内の暗黙的なパラメーターを手動で渡す必要はありません。Scala はスコープ内の暗黙的な値を自動的に見つけて、それを自動的に渡します。暗黙的な値と暗黙的なパラメータについては、次の点に注意する必要があります。 1. 同じ型のパラメータの暗黙的な値は、スコープ内でのみ出現できます。

CentOS7.0 に Scala と Sun JDK をインストールするためのガイド CentOS7.0 に Scala と Sun JDK をインストールするためのガイド Jan 02, 2024 pm 04:20 PM

今日、centOS7.0 に Scala をインストールしたところ、インストールされている cenos7.0 に独自の java-openjdk-headle.x86_64 があることがわかり、それが動作するか試してみましたが、動作しませんでした。 .javaソースプログラム実行時にコマンドが使えなかったので、OS付属のものをアンインストールして、sun付属のjdkをインストールしました。 1. まず、OS に付属の openjdk パッケージを確認します [root@mycentos01bin]#rpm-qa|grepjavajava-1.7.0-openjdk-1.7.0.512.4.5.5.el7.x86_642。関連する openjdk をアンインストールします [root@m

See all articles