声明一个变量

声明一个常量

显式指定类型

定义一个main函数

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println("hello scala")
}
}

定义一个普通函数

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(hello("scala"))
} def hello(name : String) : String = {
"hello " + name
}
}

函数不带参数时可以省略括号

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(hello())
} def hello() : String = {
"hello scala"
}
}

定义一个匿名函数

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(add(,))
} def add = (x : Int,y : Int) => x + y
}

把函数赋给一个常量

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(add(,))
} val add = (x : Int,y : Int) => x + y
}

柯里化

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(add()())
} def add(x : Int)(y : Int) = x + y
}

可变参数

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(variable("hello","admln"))
} def variable(s : String*) = {
s.foreach(x => println(x))
}
}

参数默认值

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
println(theDefault())
println(theDefault("scala"))
} def theDefault(s : String="admln") : String= {
"hello " + s
}
}

判断表达式

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
val num = ;
val result = if(num > ) else
println(result)
}
}

while循环表达式

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
var (n,r) = (,)
while(n>) {
r = r + n
n = n -
}
println(r)
}
}

for循环表达式

package org.admln.scala

class HelloScala {

}
object HelloScala {
def main (args: Array[String]) {
//1<=10
for(i <- to ) {
println(i)
}
//1<10
for(i <- until ) {
println(i)
}
   //只输出偶数
for(i <- to if i % == ) {
println(i)
}
}
}

创建一个类

package org.admln.scala

class HelloScala {

}
class Person {
var name : String = _
val age =
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person
p.name = "admln"
println(p.name + " " + p.age)
}
}

使用私有属性(外部不能访问)

package org.admln.scala

class HelloScala {

}
class Person {
var name : String = _
val age =
private[this] val gender = "male"
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person
p.name = "admln"
println(p.name + " " + p.age)
}
}

构造器

package org.admln.scala

class HelloScala {

}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = _
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
}
object MyPerson {
def main(args: Array[String]) {
val p = new Person("admln",,"male")
println(p.name + " " + p.age)
}
}

继承

package org.admln.scala

class HelloScala {

}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = _
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
}
class Student(name : String,age : Int,val major : String) extends Person(name,age) {
println("subclass is person,major is" + major)
}
object MyPerson {
def main(args: Array[String]) {
val s = new Student("admln",,"spark")
}
}

覆写父类的方法和字段

package org.admln.scala

class HelloScala {

}
class Person(var name : String,val age : Int){
println("main constructor")
var gender : String = "mail"
def this(name : String,age : Int,gender : String) {
this(name,age)
this.gender = gender
}
val school = "usa"
}
class Student(name : String,age : Int,val major : String) extends Person(name,age) {
println("subclass is person,major is" + major)
override def toString = "override method"
override val school = "china"
}
object MyPerson {
def main(args: Array[String]) {
val s = new Student("admln",,"spark")
println(s.toString)
println(s.gender)
}
}

抽象类

package org.admln.scala

class HelloScala {

}
abstract class Person {
def speak
var name : String
val age : Int
}
class Worker extends Person {
def speak {
println("speak")
}
var name = "admln"
val age =
}
object HelloScala extends App {
val worker = new Worker
worker.speak
println(worker.name + " " + worker.age)
}

App是trait的子类,内部实现了main方法并管理我们写的代码

trait

trait中可以带有实现的方法,也可以带有抽象方法,使用trait的方式是使用with混入类中

 package org.admln.scala

 class UseTrait {

 }
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
} class ConcreteLogger extends Logger {
def concreteLog {
log("It's admln")
}
} object UseTrait {
def main(args: Array[String]) {
val logger = new ConcreteLogger
logger.concreteLog
}
}

覆写父类的抽象方法(不用使用override关键字)

package org.admln.scala

class UseTrait {

}
trait Logger {
def log(msg : String)
} trait ConcreteLogger extends Logger {
def log(msg : String) {
println("log: " + msg)
}
} class Test extends ConcreteLogger {
def test {
log("It's admln")
}
} object UseTrait {
def main(args: Array[String]) {
val test = new Test
test.test
}
}

如果子trait覆写父trait已经实现的方法,就必须使用override关键字

package org.admln.scala

class UseTrait {

}
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
} trait ConcreteLogger extends Logger {
override def log(msg : String) {
println(" child log: " + msg)
}
} class Test extends ConcreteLogger {
def test {
log("It's admln")
}
} object UseTrait {
def main(args: Array[String]) {
val test = new Test
test.test
}
}

在对象中混入trait

package org.admln.scala

class UseTrait {

}
trait Logger {
def log(msg : String) {
println("log: " + msg)
}
} trait ConcreteLogger extends Logger {
override def log(msg : String) {
println(" child log: " + msg)
}
} class Test extends Logger{
def test {
log("It's admln")
}
} object UseTrait {
def main(args: Array[String]) {
val test = new Test with ConcreteLogger
test.test
}
}

apply方法和静态方法

package org.admln.scala

class UsageOfApply {

}

class ApplyTest {
def test {
println("test")
}
} object ApplyTest {
def apply() = new ApplyTest
def staticTest {
println("It's static method")
}
} object UsageOfApply {
def main(args: Array[String]) {
ApplyTest.staticTest
val at = ApplyTest()
at.test
}
}

object 中的方法和属性都是静态的,所以是单例对象的理想载体
object本身就是一个单例对象


函数式编程,把运算过程尽量写成一系列嵌套的函数调用

函数的定义

def 函数名称(变量名称 : 变量类型) : 函数返回值类型 = { 函数体 }

如果函数仅包含一条语句,那么花括号可以选择不写

值函数

匿名函数

(参数名称 : 参数类型) => 表达式

把匿名函数赋值给一个常量


闭包

代码与用到的非局部变量的混合

闭包 = 代码 + 非局部变量


高阶函数map函数

下划线代表数组中的每一个元素

高阶函数filter函数

高阶函数reduce函数


scala中的集合:List、Set、Tuple、Map

它们内部都是以apply方式来完成实例化的

List和Set

和java中的Set一样,里面不会存在相同元素

Tuple

下标从1开始

Map

Option

Option代表一个可有可无的值,有两个子类:Some和None

zip操作

partition操作

flatten操作

flatmap操作:map和flatten的结合


scala基础备忘的更多相关文章

  1. UITextView -- 基础备忘

    UITextView 这篇文章只涉及到基本的使用,日后会写一些关于结合TextKit的备忘 基本属性 let screenSize = UIScreen.mainScreen().bounds.siz ...

  2. Java Socket基础[备忘]

    1.服务端----Server.java import javax.swing.*; import java.io.*; import java.net.*; import java.awt.*; i ...

  3. ajax基础------备忘

    1:register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  4. javaweb基础备忘

    Request对象的主要方法有哪些 setAttribute(String name,Object):设置名字为name的request 的参数值 getAttribute(String name): ...

  5. Linux基础之常用基本命令备忘

    Linux基础之常用基本命令备忘 PWD   查询当前所在Linux上的位置 /         根目录 CD(change directory)切换目录  语法 CD /(注意添加空格)   LS ...

  6. Nmap备忘单:从探索到漏洞利用(Part 4)

    这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...

  7. HTML5终极备忘大全

    二.文字备忘之标签 HTML5中新增的标签 <article> 定义文章 <aside> 定义页面内容旁边的内容 <audio> 定义声音内容 <canvas ...

  8. [转] HTML5终极备忘大全(图片版+文字版)---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1544 一.前言兼图片 ...

  9. Table view 备忘

    Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以 ...

随机推荐

  1. javascript —— HTTP头文件详解

    HTTP(超文本传输协议:HyperText Transfer Protocol)是浏览器和服务器通过internet进行相互通信的协议,也是网络上应用最为广泛的一种网络协议.HTTP规范由World ...

  2. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  3. 在VS2012中实现Ext JS的智能提示

    Visual Studio 2012太强大了,居然能自己会去提取Ext JS的类的属性和方法,从而实现只能提示.下面就来介绍一下实现这个功能. 在Visual Studio 2012中随便创建一个We ...

  4. MBR所在位置

    如果offset的000000000位置如下图所示(主要看红色框框位置是否出现NTFS字样),说明系统文件是NTFS "EB 52"至"55 AA"位置是MBR ...

  5. MEF(Managed Extensibility Framework)依赖注入学习

    MSDN官方资料,并且微软还提供了SimpleCalculator sample学习样例 http://msdn.microsoft.com/en-us/library/dd460648(v=vs.1 ...

  6. 1) data-options

    <select class="easyui-combobox" data-options="editable:false"> <select ...

  7. 建立ODBC数据源(基于windows)

    1. win+r 2. control 3. 打开数据源 4. 点击添加 5. 选择Oracle in OraClient11g_home1 ,点击完成 6. 填写,查看具体参数信息点击Help 7. ...

  8. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

    简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能.非阻塞算法属于并发算法,它们可以安全地派生它们的线程, ...

  9. 解决数据库datatime数据在DataGridView里不显示秒的解决

    在数据库中正确显示有分有秒,到dataset里的时候也有,但绑定到DataGridView里的时候就没有秒,解决办法: dataGridView1.Columns["record_time& ...

  10. jpa动态创建EntityManagerFactory 态设置数据库连接 EntityManager;

    //jpa动态创建EntityManagerFactory 态设置数据库连接EntityManager;createEntityManagerFactory(String persistenceUni ...