Scala基础二

2017/08/04 Scala

基础内容二


对null的处理

Scala中新加了一个抽象类,Option,有两个字类Some和None。其中Some是代表有值,None代表没有值。这是从语言角度上解决了空指针问题。当scala中方法返回Option类对象的时候,可以用getOrElse函数保证一定能取得意料之中的值。同时,scala中支持null,因为需要保持和Java的互操作性。

代码组织

scala运行java使用的代码组织方式,同时也支持类似C#命名空间的组织方式,使用大括号来定义包的作用域。
只有一种例外,连续包声明,导入的包都有包级别的声明,需要为包层次中的每个包用来做使用单独的Package声明。如

package com.abc
package bcd
class bcdCls1{// 这个类的包名是com.abc.bcd
  ...
}

代码导入

导入包的方法是和java一致的。

import abc._ //导入所有,相当于import abc.*
import java.util.(Map,HashMap) //选择导入

和java 不同的地方在于import 语句的位置可以任意,可以在作用域中,可以重命名,可以限制类型可见性。

import java.math.BigInteger.{
  ONE=>_,//hide element
  TWO,
  ZERO=>JZERO//rename element
}

和java的不同点在于,scala使用相对路径导入包。

import scala.collection.mutable._
import collection._//这个就是相对路径导入的

类的封闭

sealed 表示这个类的子类必须和这个类在同一个文件中,也可以用finally 保证用户不能创建新的派生类。

操作符重载

这是在C++中巨好用的功能,在java中没有的功能,现在在scala中又有了这个功能。因为scala中所有的元素几乎都是对象,所有的操作符几乎都是方法。并且中缀表达式中点号可以忽略。
各种标示符需要遵循的规则如下:

  1. 除了括号类字符、分隔符之外,其他所有的可打印的 ASCII 字符如字母、数字、下划线(_ )和美元符号($ )均可出现在 Scala 标示符 中,插入字符包括了 (,) 、[,] 、{,and} ;而分隔符则包括了` 、’ 、’ 、” 、. 、; 以及 , 。Scala 还允许在标示符中使用编码在 \u0020 到 \u007F 之间的字符,如数学符号、像/和 < 这样的操作符字符以及其他的一些符号。
  2. 不能使用保留字。
    (ps.如果一个函数没有参数 ,可以不要括号。定义和调用保持一致就可以了。
    def isEven(n:Int) = ( n % s ) == 0
    List(1,2,3,4) filter isEven foreach println 
    

    )

if 语句的变化

if语句和其实所有语句都是有返回值的,所以可以把if语句赋值给变量。三元表达式就没有了存在的必要。

循环

  1. for 循环(loop)
    val list=List(1,2,3,4)
    for(i <- list)
     println(i)
    
  2. 生成器表达式(generator expression)
    for ( i <- 1 to 10) println(i)
    
  3. 保护式(guard)
    for( i <- list
     if i<5)
     println(i)
    
  4. Yielding 通过for表达式生成新的集合
    for( i <- list
     if i<5) yield newlist
    
  5. while 和java 一样
  6. do-while 和Java一样

    异常

    使用try catch finally ,但是通常用模式匹配处理异常(catch 部分使用 case 或者偏函数处理)

枚举

scala中没有关键字了,只有一个类Enumeration,继承这个类就可以了。
基础知识差不多了,下一次写OOP部分。

Show Disqus Comments

Search

    Table of Contents