English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основные синтаксические элементы Scala

Если вы уже были Java-программистом и знаете основы Java, то вы быстро сможете изучить основы грамматики Scala.

Самое большое различие между Scala и Java заключается в том, что точка с запятой в конце строки в Scala является необязательной.

Мы можем认为, что Scala-программа является集合ом объектов, которые передают сообщения друг другу, вызывая методы. Давайте разберемся с понятиями: класс, объект, метод, пример переменной:

  • Объект - Объекты имеют атрибуты и поведение. Например: цвет, имя - это свойства собаки, а поведение включает в себя: лай, бег, еда и т.д. Объект является примером класса.

  • Класс - Классы представляют собой абстракцию объектов, а объекты являются конкретными примерами классов.

  • Метод - Описание базового поведения метода, один класс может содержать несколько методов.

  • Поле - Каждый объект имеет уникальный набор переменных-примеров, то есть полей. Свойства объекта создаются через присвоение значений полям.

Первый Scala программ

Интерактивное программирование

Интерактивное программирование не требует создания файла скрипта и можно вызывать через следующую команду:

$ scala
Добро пожаловать в Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Введите выражения для их оценки.
Тип: help для получения дополнительной информации.
scala> 1 + 1
res0: Int = 2
scala> println("Hello World!")
Hello World!
scala>

Формат скрипта

Мы также можем выполнить код, создав файл HelloWorld.scala, содержащий следующий код:

object HelloWorld {
   /* Это мой первый Scala программа
    * Эта программа выведет 'Hello World!' 
    */
   def main(args: Array[String]) {
      println("Hello, world!") // выводит Hello World
   }
}

Далее мы используем команду scalac для компиляции файла:

$ scalac HelloWorld.scala 
$ ls
HelloWorld$.class    HelloWorld.scala
HelloWorld.class

После компиляции мы можем увидеть, что в директории был создан файл HelloWorld.class, который можно запустить на Java Virtual Machine (JVM).

После компиляции мы можем использовать следующую команду для выполнения программы:

$ scala HelloWorld
Hello, world!

Примеры онлайн »

Основная грамматика

Основные правила грамматики Scala включают в себя следующие моменты:

  • Различие регистров - Scala чувствителен к регистру, что означает, что Hello и hello в Scala имеют разное значение.

  • Имя класса - Все имена классов начинаются с заглавной буквы.
    Если имя класса состоит из нескольких слов, каждая первая буква слова должна быть заглавной.

    Пример:class MyFirstScalaClass

  • Имя метода - Все имена методов начинаются с малой буквы.
    Если несколько слов используются для составления имени метода, то первая буква каждого слова должна быть заглавной.

    Пример:def myMethodName()

  • Имя файла программы - Имя файла программы должно полностью соответствовать имени объекта (в новых версиях это не требуется, но рекомендуется сохранять эту привычку).
    Сохраняя файл, следует сохранять имя объекта, используемого в файле (не забывайте, что Scala чувствителен к регистру), и добавлять ".scala" в качестве расширения файла. (Если имя файла и имя объекта не совпадают, программа не будет компилироваться).

    Пример: Предположим, "HelloWorld" - это имя объекта. Тогда этот файл должен быть сохранен как 'HelloWorld.scala'

  • def main(args: Array[String]) - Программа Scala начинается с метода main(), который является обязательным входным компонентом каждого Scala-программы.

Идентификатор

Scala использует два типа символов: символы и символы.

Символьные числовые символы начинаются с буквы или подчеркивания, за которыми могут следовать буквы или цифры, символ "$" в Scala также рассматривается как литера. Однако имена, начинающиеся с "$", являются зарезервированными для идентификаторов, генерируемых компилятором Scala, и приложения должны избегать использования идентификаторов, начинающихся с "$", чтобы избежать конфликтов.

Правила именования в Scala аналогичны правилам Java, camelCase, с маленькой буквы, например toString. Имена классов начинаются с большой буквы. Также следует избегать использования символов подчеркивания в конце, чтобы избежать конфликтов. Символьные символы содержат один или несколько символов, таких как +, :, ? и т.д., например:

+ ++ ::: < ?> :->

Scala использует экранированные символы во время внутреннего выполнения, например:-> используется как $colon$minus$greater для представления этого символа. Поэтому, если вам нужно в Java-коде доступа к методу:->, вам нужно использовать внутреннее имя Scala $colon$minus$greater.

Смешанные символы состоят из символьных числовых символов, за которыми следуют один или несколько символов, например, unary_+ является именем для внутреннего реализация метода + в Scala. Лiteralные символы - это строки, определяемые с помощью "", например `x` `yield`.

Вы можете использовать любые допустимые символы Scala в "", Scala интерпретирует их как символы Scala. Один из примеров использования - метод yield класса Thread. В Scala вы не можете использовать Thread.yield(), потому что yield является ключевым словом Scala, и вам нужно использовать Thread.`yield`() для вызова этого метода.

Scala 关键字

下表列出了 Scala 保留关键字,我们不能使用以下关键字作为变量:

abstractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield 
-:==>
<-<:<%:>:
#@

Scala 注释

Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。注释在 Scala 编译中会被忽略,示例如下:

object HelloWorld {
   /* 这是一个 Scala 程序
    * 这是一行注释
    /* 这里演示了多行注释
    */
   def main(args: Array[String]) {
      // 输出 Hello World
      // 这是一个单行注释
      println("Hello, world!") 
   }
}

空行和空格

一行中只有空格或者带有注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割。

换行符

Scala 是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。如果你愿意可以输入一个,但若一行里仅 有一个语句也可不写。另一方面,如果一行里写多个语句那么分号是需要的。例如

val s = "基础教程网"; println(s)

Scala 包

定义包

Scala 使用 package 关键字定义包,在 Scala 将代码定义到某个包中有两种方式:

第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。 比如:

package com.w3codebox
class HelloWorld

Второй метод несколько похож на C#, например: }}

package com.w3codebox {
  class HelloWorld 
}

Второй метод — это определение нескольких пакетов в одном файле.

Ссылка

Scala использует ключевое слово import для ссылок на пакеты.

import java.awt.Color  // Импортируется Color
 
import java.awt._  // Импортируются все члены пакета
 
def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent
  ...  // Потому что импортирован java.awt, можно пропустить предыдущую часть
}

Стatement import может出现在 anywhere, а не только в верху файла. Эффект import распространяется от начала до конца блока инструкций. Это大大 уменьшает вероятность конфликта имен.

Если нужно импортировать несколько членов пакета, можно использовать selector (выборщик):

import java.awt.{Color, Font}
 
// Переименовывание членов
import java.util.{HashMap => JavaHashMap}
 
// Скрытие членов
import java.util.{HashMap => _, _} // Импортируются все члены пакета util, но HashMap скрыт

Внимание:По умолчанию Scala всегда импортирует java.lang._ , scala._ и Predef._, здесь также объясняется, почему пакеты, начинающиеся с scala., всегда упускаются при использовании.