English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Если вы уже были Java-программистом и знаете основы Java, то вы быстро сможете изучить основы грамматики Scala.
Самое большое различие между Scala и Java заключается в том, что точка с запятой в конце строки в 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 保留关键字,我们不能使用以下关键字作为变量:
abstract | case | catch | class |
def | do | else | extends |
false | final | finally | for |
forSome | if | implicit | import |
lazy | match | new | null |
object | override | package | private |
protected | return | sealed | super |
this | throw | trait | try |
true | type | val | var |
while | with | yield | |
- | : | = | => |
<- | <: | <% | :>: |
# | @ |
Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。注释在 Scala 编译中会被忽略,示例如下:
object HelloWorld { /* 这是一个 Scala 程序 * 这是一行注释 /* 这里演示了多行注释 */ def main(args: Array[String]) { // 输出 Hello World // 这是一个单行注释 println("Hello, world!") } }
一行中只有空格或者带有注释,Scala 会认为其是空行,会忽略它。标记可以被空格或者注释来分割。
Scala 是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。如果你愿意可以输入一个,但若一行里仅 有一个语句也可不写。另一方面,如果一行里写多个语句那么分号是需要的。例如
val s = "基础教程网"; println(s)
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., всегда упускаются при использовании.