Scala 入门详解

  基本语法

Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的

Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。类,对象,方法,实例变量的概念:

对象 - 对象有属性和行为。例如:一只狗的状属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。

类 - 类是对象的抽象,而对象是类的具体实例。

方法 - 方法描述基本的行为,一个类可以包含多个方法。

字段 - 每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。

区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义

类名 - 对于所有的类名的第一个字母要大写。采用驼峰命名。

方法名 - 所有的方法名称的第一个字母用小写,采用驼峰命名。

程序文件名 - 程序文件的名称应该与对象名称完全匹配。

def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

  标识符

Scala 可以使用两种形式的标志符,字符数字和符号

在" "之间使用任何有效的 Scala 标志符,Scala 将它们解释为一个 Scala 标志符,当使用scala关键字命名时必须加"区别

  Scala 注释

Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。

  换行符

Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。

  Scala 包

定义包

Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:

第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。 比如:

package com.myDemo

class HelloWorld { }

第二种方法有些类似 C#,可以在一个文件中定义多个包,如:

package com.myDemo {
class HelloWorld
  }

引用包

Scala 使用 import 关键字引用包:

import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。

import java.awt._  // 引入包内所有成员

import java.awt.{Color, Font}   //引入部分成员,Color,Font成员

import java.util.{HashMap => JavaHashMap}   // 重命名成员

import java.util.{HashMap => _, _} //隐藏成员:引入了util包的所有成员,但是HashMap被隐藏了

  变量

在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量,val相当于Java中的final变量,一旦被赋值就不能修改。

constant为定义常量的关键字

  函数

Scala 函数声明格式如下:

def functionName ([参数列表]) : [return type]={   }

如果不写等于号和方法主体,那么方法会被隐式声明为"抽象(abstract)",包含它的类也是一个抽象类型.

  对象

普通对象使用class定义,默认public,Unit(void)即没有返回值

Scala没有静态成员,Singleton单例对象使用object定义。

  占位符语法

scala的函数中用“_”作为占位符,这个占位符可以用于代替传入的参数

  数组

val arrarys=new Array[String](3); //arrarys为val,但内部的数组值是可变的

arrays(0)="num1";   //数组赋值取值用()

  Scala操作符等价于方法,所以任意方法都可以以操作符的形式使用

1 + 2     //(1).+(2) 在只有一个参数的情况下,可以省略 . 和 ()

scala中无++,-- 只能写成i = i+1,i += 1

  String Interpolation String (插值器)

例如:

val name = "James"

println(s"Hello, $name")    // Hello, James

  右操作符 "::"  以"::"结尾的方法是右结合的

:: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。

用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(x::list等价于list.::(x))

:+和+: 两者的区别在于:+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match,而+:则不行。 +:和:+ 只要记住冒号永远靠近集合类型就可以了。

++ 该方法用于连接两个集合,list1++list2

::: 该方法只能用于连接两个List类型的集合

  scala三引号的作用

对于大量转义字符及换行的字符串可以使用三个双引号,三个双引号对里面的换行、转义符等原样输出,左对齐可以使用|进行对其。

例如:  val hello = """|Welcome to

|Scala, "Hello World" """ ;

  scala可以通过“*”来定义函数的可变参数

数组当做变量直接传入时,使用“:_*”就是告诉解释器,将数组的中的元素当做一个个参数传入

  函数调用

如果调用函数时,不需要传递参数,则scala允许调用函数时省略括号,如:

for(arg: args) { println(arg); }

args.foreach((arg:String) =>println(arg));

args.foreach((arg) =>println(arg)); //省略类型

args.foreach(println); //省略参数列表

  apply用法

类中定义了apply的方法后,调用这个方法不需要显示的写apply。直接写"实例名(参数列表)"的形式就好。

通常使用这种方式来构造类的对象。

参考资料:http://www.runoob.com/scala/scala-tutorial.html

Scala 入门详解的更多相关文章

  1. Scala入门详解

    object作为Scala中的一个关键字,相当于Java中的public static class这样的一个修饰符,也就说object中的成员都是静态的! 所以我们在这个例子中的main方法是静态的, ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  4. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  5. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  6. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  7. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  8. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  9. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

随机推荐

  1. kettle的资源库创建及修改密码

    在kettle中的转换或者作业等资源的存储的仓库称为资源库:分为文件资源库.数据库资源库. 一个转换或者作业可以属于某个资源库或者一个单独的文件形态存在. 一.数据库资源库 1.1在mysql中创建一 ...

  2. Web APi入门之Self-Host寄宿及路由原理 【转载】

    前言 刚开始表面上感觉Web API内容似乎没什么,也就是返回JSON数据,事实上远非我所想,不去研究不知道,其中的水还是比较深,那又如何,一步一个脚印来学习都将迎刃而解. Self-Host 我们知 ...

  3. 我发起了一个 支持 PostgreSql 的 外围设施 的 .Net 开源项目

    目标 :  让 PostgreSql 成为 通用的 跨平台 的 数据库 , 成为 开发者 喜爱 的 利器 . 要做的事 , 当然 , PostgreSql 本身现在不用我们去做什么 . 一个 数据库 ...

  4. char/unsigned char/int/short 存储范围

    Type Storage size Value range char 1 byte -128 to 127 or 0 to 255 unsigned char 1 byte 0 to 255 sign ...

  5. ZeroTier One

    ZeroTier – 无配置,零基础「内网穿透」随时随地连回家/学校/办公室 [跨平台] https://www.appinn.com/zerotier-one/ Virtual NetworkZer ...

  6. redis设计与实现-数据结构

    1,redis存储有5种数据对象,有7种数据结构底层实现 2,sds简单字符串 不直接使用字符数组或是string 封装了长度变量,加快获得字符串长度 杜绝缓冲区溢出(拼接字符串的时候不会因为内存里连 ...

  7. pycharm Process finished with exit code (0xC0000005)

    pycharm  Process finished with exit code  (0xC0000005)解决办法 上次报过这个错误,是在安装浏览器时发现的,报过同样的错误.按当时的方法,以为切地解 ...

  8. Python问题汇总

    1.dict is not callable tree是一个字典类型. tree("left") -> tree["left"]   2.list ind ...

  9. 回顾<Video Timing Controller v6.1>

    回顾<Video Timing Controller v6.1> VTC总体架构图: 对于最基本的功能:视频时序产生

  10. Weekend Log 4.6

    PHP相关 常用PHP编译 .\/configure 12 ./configure -prefix=/usr/local/php --with-config-file-path=/usr/local/ ...