这里简单地列举一下Scala与Java在语法上的差异。
• 类型的声明不是“类型 变量 = 值”而是“变量:类型 = 值”。但是,在类型推断可能的情况下类型声明可以省略。
• 不可变的变量用val,可变的变量用var来声明。任意的数据都可以用def来命名(包括val也可以替换成def)。使用def来声明函数和方法。
• 语句分隔符“;”是可选的,通常用换行来表示。
• 一连串复合语句可以用“;”来分割,然后用“{”和“}”块来包括起来。如果单语句的不用大括号包括也可以。例如for语句既可以是for(i < - List(1, 2, 3, 4)){println(i)},也可以是for(i < - List(1, 2, 3, 4)) println(i)。
• 包括数字、字符串和数组,所有的数据都是对象。包括Java的原类型int、double和bool等所有的数据都对应于Scala中的相应类。
• void作为Unit类来处理,Unit的唯一实例是()。
• 以array(i)来使用数组的索引而不是array[I]。数组项目的取得array(i)和更新array(i) = x也可以认为是调用array.apply(i)和array.update(i, x)方法。
• []可以用来指定范型的具体类型,比如type IList = List[Int]为声明项目类型为Int的列表类型。可以用asInstanseOf[T]方法来强制转换类型,虽然使用了范型之后大部分情况下是用不着的。
• for循环并不是语法,而是被定义为称作for-comprehension的语法糖,最后被转换成map和filter等方法的组合。
• 有意放弃了静态(static)的概念,而是用单例对象来取代了静态对象和方法。不是用class而是用object像“object Singleton extends Object { val data: Int }”一样被定义,其中的属性可以用来代替静态成员。
• 使用import语句来引入包和类,并用“_”代替了“*”。比如import javax.swing.JFrame; import javax.swing.JFrame._。可以格式 “import javax.swing.{JFrame=>MyWindow}”来声明类型的别名。
scala自学日记(7)-Scala与Java在语法上的差异
最新推荐文章于 2024-11-07 11:39:01 发布