Scala(一)-- 语法简介

Scala结合了面向对象和函数式编程,具备静态类型特性,常用于高性能系统和大数据处理。学习Scala的原因包括速度快、简洁优雅、融入Hadoop生态圈。本文介绍了Scala的特点、环境准备,并详细讲解了变量定义、数据类型、类型转换、操作符、条件表达式、块表达式、循环语句、方法、函数、数组、映射、元组、列表、集合等基础语法。
摘要由CSDN通过智能技术生成

scala

Scala(Scalable Language)以一种简洁、高级的语言将面向对象函数式编程结合在一起.Scala的静态类型有助于避免复杂应用程序中的bug,它的JVM和JavaScript运行时允许您构建高性能的系统,可以轻松地访问庞大的库生态系统。

1、scala的特点:

(1)、面向对象

scala是一个纯面向对象的语言,所有的值都是对象、类和对象行为用类和特质来描述

(2)、函数式编程(项目的组成是函数)

纯函数(没有副作用)、一个参数输入,输出是确定的(中间没有涉及到其他变量、数据结构的修改,没有打印),函数要求比较高,所有函数都是值

函数等于一个值,可以作为一个普通的变量去使用
(面向过程)

(3)、静态类型

-类型在编译阶段确定–静态语言 类型在运行阶段确定–动态语言
-强类型语言:(类型转换时确定)必须强制类型转换 弱类型语言:自动类型转换

基于jvm,高性能,先编译为java的class文件,再去运行

2、为什么学scala?

1、速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多
2、简洁优雅:api优雅,spark源码是scala写的
3、能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。

3、环境准备

jdk1.8 、开发工具idea、安装scala

注意:路径不要有中文、空格
安装idea
安装idea 插件
解压scala
配置环境变量(SCALA_HOME、PATH)

Scala语法:

1.变量定义###

var 变量名:变量类型=初始化值 (能修改)
val 变量名:变量类型=初始化值 (不能修改)

//变量名在前,变量类型在后
scala> val str:String = "hello"
str: String = hello

scala> val t1 = 3
t1: Int = 3

scala> t1 = 5
<console>:8: error: reassignment to val
       t1 = 5
          ^

scala> var t2 = 3
t2: Int = 3

scala> t2 = 5
t2: Int = 5

scala中:
var修饰的变量,内容和引用都可变
val修饰的变量是不可变的,注意不可变的不是内容,而是引用

举例:
scala> val arr = Array(1,2,3,4)
arr: Array[Int] = Array(1, 2, 3, 4)

scala> arr(1)
res2: Int = 2

scala> println(arr)
[I@7b22ec89

scala> arr
res4: Array[Int] = Array(1, 2, 3, 4)

scala> val arr1 = Array(5,43,65)
arr1: Array[Int] = Array(5, 43, 65)

scala> arr=arr1
<console>:9: error: reassignment to val
       arr=arr1
          ^

scala> arr(1)=55

scala> arr
res6: Array[Int] = Array(1, 55, 3, 4)

val修饰的变量,相当于Java中final修饰的变量

可以加lazy修饰变量(只有val修饰的变量才能被lazy修饰),先不赋值,使用时再赋值

scala> lazy val t = 56
t: Int = <lazy>

scala> t
res7: Int = 56

注意:

1)可以不写类型,根据赋值去判断
2)val修饰的变量不能修改,但val修饰的变量是引用类型时可以修改(举例数组)
3)可以加lazy修饰变量(只有val修饰的变量才能被lazy修饰),先不赋值,使用时再赋值(lazy val j = 100)

2.数据类型

(数值类型 引用类型)
Scala和Java一样,有8种数值类型Byte、Char、Short、Int、Long、Float、Double和一个Boolean类型,和Java不同的是 ,Scala没有基本类型与包装类型之分,这些类型都是类,有自己的属性和方法。

Unit是值类型,他只有一个实例对象()。
Nothing是所有类型的子类,他没有一个具体的实例对象,一个常见的应用如:抛出异常、程序exit,无限循环等。
Nothing是所有类型的子类,也是Null的子类。Nothing没有对象,但是可以用来定义类型。例如,如果一个方法抛出异常,则异常的返回值类型就是Nothing(虽然不会返回) 。
Null是所有引用类型的子类,它只有一个实例对象null,主要用来和其他的JVM语言进行互操作。

详解:

数据类型 描述
Byte 8位有符号补码整数。数值区间为 -128 到 127
Short 16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754 标准的单精度浮点数
Double 64 位 IEEE 754 标准的双精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
Unit 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Null null 或空引用
Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。
Any Any是所有其他类的超类
AnyRef AnyRef类是Scala里所有引用类(reference class)的基类
上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型。在scala是可以对数字等基础类型调用方法的。

3.Scala类型转换

如:char.toInt(调用方法)

scala> val ch:Char = 'A'
ch: Char = A

scala> ch.toInt
res11: Int = 65

4.Scala操作符

Scala中没有操作符,只是以操作符的格式去进行方法调用。没有++ --,所有操作符都是方法 。

//算术运算符
+、-、* 、/、%
//关系操作符
> < >= <= != ==
//逻辑操作符
&& || !
//位操作符
| & ^ ~ << >> >>>
~:补运算符,是一元的,具有‘翻转’位的效应。
>>:带符号右移。正数右移高位补0,负数右移高位补1。
>>>:无符号右移。无论是正数还是负数,高位通通补0。
//赋值运算符
= += -= *= /= %= <<= >>= &= ^= |=

运算符优先级:不清楚时使用(ÿ

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值