开发者学堂课程【Scala 核心编程-基础:标识符的使用说明】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8901
标识符的使用说明
目录
一、 标识符的命名规范
二、 标识符的命名规则
三、 标识符举例说明
一、 标识符的概念
1. Scala 对各种变量、方法、函数等命名时使用的字符序列称为标识符。
//在 scala 中方法和函数是两个不同的或者是有区别的概念
2. 凡是自己可以起名字的地方都叫标识符。
二、 标识符的命名规则
Scala 中的标识符声明,基本和 Java 是一致的,但是细节上会有变化。
//比如说类名,包名,方法名,文件名几乎都是一样,但是细节会有变化
1. 首字符为字母,后续字符任意字母和数字,美元符号,可后接下划线_ //跟 java 一样
2. 数字不可以开头 //和 java 相同
3. 首字符为操作符(比如+-*/),后续字符也需跟操作符,至少一个(反编译) //特别
例子:
package com.atguigu.chapter02.iden
o
bject IdenDemo01 {
d
ef main(args:Array[String]):Unit= {
val ++ = “hello,world!”
//定义一个函数,没有报错也就是说++可以当做一个标识符来进行使用
p
rintln(++)
//输出
运行结果如下:
D
:\
program
\jdk8\bin\java…
h
ello,world!
P
rocess finished with exit code 0
没有任何问题,但是它有一个前提是如果首字符是一个操作符的话后续必须跟一个操作符
如果减少一个+号就会报错:
val + = “hello,world!”
p
rintln(+)
//错误
v
al -+=90
//正确
p
rintln(“res=”+ -+)
运行结果如下:
D
:\
program
\jdk8\bin\java
h
ello,world!
r
es=90
没有错误。
错误示范:
val +q=”abc” //错误
后续字符也得跟一个或者多个操作符
val -+*/ = 90 //正确
底层操作://看看编译器是如何处理此问题的
打开反编译工具,找到刚才所编写的案例的文件,点击进入可以看到代码如下:
p
ackage com.atguigu.chapter02.iden;
i
mport scala.Predef.;
p
ublic final class IdenDemo01$
{
public static final MODULE$;
s
tatic
{
new();
}
p
ublic void main(String[] args)
{
S
tring $plus$plus = “hello,world!”;
//将操作符进行了转译
Predef..MODULE$.println($plus$plus);
int $minus$plus$times$div=90;
//操作符转译
P
redef..MODULE$println(new StringBuilder().append(“res=”).append(BoxesRunTime.boxToInteger($minus$plus$times$div)).toString());
}
private IdenDemo01$(){
MODULE$ = this;
}
}
/
/++
=
> $plus$plus
4. 操作符(比如+-*/)不能在标识符中间和最后
5. 用反引号‘.…..’包括的任意字符串,即使是关键字(39个)也可以 [true]
例子:
var true = “hello,scala!” //给它一个字符串,发生错误,因为这是一个关键字
修改错误://加上反引号
var ‘true’ = “hello,scala!” //正确
println(“内容=”+ ‘true’) //输出
//反引号不可以去掉,它的作用是在编译器中告诉编译器,此位置就是标识符,而不是 true
运行结果如下:
D
:\
program
\jdk8\bin\java…
h
ello,world!
r
es=90
内容=hello,scala!
//mysql 中使用 int 做一个表名,也可以使用反引号
三、 标识符举例说明
hello //正确
hello //正确
1hello //错误,原因是数值打多了
h-b //错误,原因是操作符在中间
x h //错误,原因是中间出现空格
h_4 //正确
_ab //正确
Int //正确,int 在 scala 中不是关键字而是预定义标识符,所以可以用,但是不推荐
例子:
var Int =90.45 //没有报错,因为类型为 double 类型
println(“Int=”+ Int)
运行结果如下:
Int=90,45
没有任何问题。
Float //正确
_ //错误,因为在 scala 中,下划线_有很多其他的作用,因此不能使用
例子:
//不能使用_做标识符
var _ = “jack”
println(_)
运行效果如下:
I
n
formation 2018/11/12 9:57 – Compilation completed with 1 error and 0 warnings in 1s 400ms
C
:\Users\Administraor\IdeaProjects\java0705scala\src\main\scala
\
com\atguigu\chapter02
\
iden\IdenDemo01_scala
E
rror(26,13) missing parameter type for expanded function ((x$1) => println(x$1))
println(…)
出现异常,如果直接使用下划线_的话它就不是标识符了,它就会有其他的作用,比如在引包的时候代表所有包下所有相关的类等等。
Abc //正确
+*- //正确
+a //错误,因为首先使用标识符,后面就不可以跟字符