Scala-学习日志-20181217

1、如何设计一个编程语言

找到这些编程语言共同点和不同点。

2、为什么学习scala

3、环境安装

4、入门程序

5、变量的定义

6、数据的类型

7、操作运算符和编程规范

8、流程控制

9、函数和方法

定义、使用、关系(相互转换)

10、scala数组

11、scala集合

——————————

Scala 官网:https://www.scala-lang.org/

集成面向对象编程和函数式编程的各种特性。Scala 运行于 Java 平台(Java 虚拟机),并兼容现有的 Java 程序。

面向对象编程、面向过程编程以及函数式编程3者的区别是什么?

编程语言的分类方式有哪些?

1、 面向对象和函数式编程
2、 静态编程语言和动态编程语言
3、 编译型和解释型
4、 汇编语言,脚本语言,机器语言,高级语言
5、 强类型语言和弱类型语言

Python 是动态类型语言,是强类型语言。
JavaScript 是动态类型语言,是弱类型语言。
Java 是静态类型语言,是强类型语言。

Scala 将成为未来大数据处理的主流语言。

如何安装Scala?

https://blog.csdn.net/qq_1018944104/article/details/85054596

关于Scala数据类型

1、一个要点:名称和java相同的类型,长度也一样,不过都是首字母大写。

2、一张图:表明整个Scala编程语言的数据类型的关系

3、七个知识点

  1. Any 是所有类的父类,包括值类型 AnyVal,和引用类型 AnyRef
  2. AnyVal 是所有值类型的父类,包括 Int,Double,Boolean,Unit 等等
  3. AnyRef 是所有引用类型的父类,包括 Null
  4. Null 是所有引用类型的子类
  5. Nothing 是所有类的子类
  6. Unit 类型只有一个实例,是(),相当于 java 中的 void,没有任何的实质意义
  7. Null 也只有一个实例,是 null,相当于 java 中的 null,能赋值给任何引用类型变量,不能赋值给值类型变量

ne eq equals == 的区别

简言之,equals方法是检查值是否相等,而eq方法检查的是引用是否相等。所以如果比较的对象是null那么==调用的是eq,不是null的情况调用的是equals。

 

条件表达式 if

总结:
1)if 条件表达式它是有返回值的,返回值是多个分支的返回结果的共同父类
2)返回值会根据条件表达式的情况会进行自动的数据类型的推断(返回的是多个分支的共同父类)

总结:就算是赋值表达式,也是有返回值的。是空,是 Unit

循环 for 和 while

在 scala 中有 for 循环和 while 循环,用 for 循环比较多。for 循环语法结构:for (i <- 表达式/数组/集合)

总结:
1)while 使用跟 java 一模一样
2)注意点:在 scala 里面不支持 i++ i-- 等操作统一写成 i+=1 i-=1

方法和函数

Scala 中的+ - * / %等操作符的作用与 Java 一样,位操作符 & | ^ >> <<也一样。
只是有一点特别的:这些操作符实际上是方法。例如:
a + b
是如下方法调用的简写:
a.+(b)
a 方法 b 可以写成 a.方法(b)

定义方法

scala> def ml(x:Int,y:Int):Int = x*y
ml: (x: Int, y: Int)Int

scala> def m2(x:Int,y:Int){println("aa");var aa = 2;aa}
m2: (x: Int, y: Int)Unit

scala> m2(1,2)
aa

scala> def m3(x:Int,y:Int) = {println("aa");var aa = 2;aa}
m3: (x: Int, y: Int)Int

scala> m3(1,2)
aa
res4: Int = 2

方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型
注意:函数体应该改成叫方法体!!!如果不写等号,代表没有返回值。

定义函数

scala> val add = (x:Int,y:Int) => x + y
add: (Int, Int) => Int = <function2>

scala> add(1,2)
res5: Int = 3

函数意义:表示接受两个 Int 类型的变量,然后做累加。经过 scala 的自动类型推断得知,最后返回的结果数据的类型也是 Int。

方法与函数的区别

1、函数可以作为方法的参数,但是也可以作为函数的参数

scala> def m2(f:(Int,Int)=>Int) = f(2,6)
m2: (f: (Int, Int) => Int)Int

scala> val f2 = (x:Int,y:Int) => x -y
f2: (Int, Int) => Int = <function2>

scala> m2(f2)
res6: Int = -4

scala> val aa = (x:Int) => x + 1
aa: Int => Int = <function1>

scala> val bb = (f:Int => Int,x:Int) => f(x) + 1
bb: (Int => Int, Int) => Int = <function2>

scala> bb(aa,5)
res7: Int = 7

2、方法也可以作为方法的参数,也可以作为函数的参数

scala> def mm(x:Int,y:Int):Int = x + y
mm: (x: Int, y: Int)Int

scala> def mm1(f:(Int,Int) => Int,x:Int,y:Int) = f(x,y)
mm1: (f: (Int, Int) => Int, x: Int, y: Int)Int

scala> mm1(mm,2,4)
res8: Int = 6

scala> mm1(mm _,2,4)
res9: Int = 6

scala> def m1(x:Int,y:Int) = x + y
m1: (x: Int, y: Int)Int

scala> val f2 = (f:(Int,Int) => Int,z:Int,b:Int) => f(z,b)
f2: ((Int, Int) => Int, Int, Int) => Int = <function3>

scala> f2(m1,2,3)
res10: Int = 5

scala> f2(m1 _,2,3)
res11: Int = 5

注意:_ 可以将方法和函数进行相互转换

Scala 函数式编程特点

高阶函数(Higher-order functions)
闭包(closures)
模式匹配(Pattern matching)
单一赋值(Single assignment)
延迟计算(Lazy evaluation)
类型推导(Type inference)
尾部调用优化(Tail call optimization)
类型推导(Type inference)

Scala 数组 Array

两对概念:

    1、定长 和 变长(长度是否可以改变)    数组

        关于数组:有定长,和 不定长/变长  的区分

        定长数组: Array
        变长数组: ArrayBuffer

    2、可变 和  不可变  ------>  集合   List  Set  Map   Tuple   Seq 

        可变:mutable
        不可变:immutable

        不可变的集合 就跟 val修饰的普通值变量一样

数组的知识点包括:定义、访问、遍历、修改、删除、拼接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值