声明一个变量

声明一个常量

显式指定类型

定义一个main函数

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println("hello scala")
  9. }
  10. }

定义一个普通函数

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(hello("scala"))
  9. }
  10.  
  11. def hello(name : String) : String = {
  12. "hello " + name
  13. }
  14. }

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

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(hello())
  9. }
  10.  
  11. def hello() : String = {
  12. "hello scala"
  13. }
  14. }

定义一个匿名函数

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(add(,))
  9. }
  10.  
  11. def add = (x : Int,y : Int) => x + y
  12. }

把函数赋给一个常量

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(add(,))
  9. }
  10.  
  11. val add = (x : Int,y : Int) => x + y
  12. }

柯里化

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(add()())
  9. }
  10.  
  11. def add(x : Int)(y : Int) = x + y
  12. }

可变参数

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(variable("hello","admln"))
  9. }
  10.  
  11. def variable(s : String*) = {
  12. s.foreach(x => println(x))
  13. }
  14. }

参数默认值

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. println(theDefault())
  9. println(theDefault("scala"))
  10. }
  11.  
  12. def theDefault(s : String="admln") : String= {
  13. "hello " + s
  14. }
  15. }

判断表达式

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. val num = ;
  9. val result = if(num > ) else
  10. println(result)
  11. }
  12. }

while循环表达式

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. var (n,r) = (,)
  9. while(n>) {
  10. r = r + n
  11. n = n -
  12. }
  13. println(r)
  14. }
  15. }

for循环表达式

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. object HelloScala {
  7. def main (args: Array[String]) {
  8. //1<=10
  9. for(i <- to ) {
  10. println(i)
  11. }
  12. //1<10
  13. for(i <- until ) {
  14. println(i)
  15. }
       //只输出偶数
  16. for(i <- to if i % == ) {
  17. println(i)
  18. }
  19. }
  20. }

创建一个类

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. class Person {
  7. var name : String = _
  8. val age =
  9. }
  10. object MyPerson {
  11. def main(args: Array[String]) {
  12. val p = new Person
  13. p.name = "admln"
  14. println(p.name + " " + p.age)
  15. }
  16. }

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

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. class Person {
  7. var name : String = _
  8. val age =
  9. private[this] val gender = "male"
  10. }
  11. object MyPerson {
  12. def main(args: Array[String]) {
  13. val p = new Person
  14. p.name = "admln"
  15. println(p.name + " " + p.age)
  16. }
  17. }

构造器

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. class Person(var name : String,val age : Int){
  7. println("main constructor")
  8. var gender : String = _
  9. def this(name : String,age : Int,gender : String) {
  10. this(name,age)
  11. this.gender = gender
  12. }
  13. }
  14. object MyPerson {
  15. def main(args: Array[String]) {
  16. val p = new Person("admln",,"male")
  17. println(p.name + " " + p.age)
  18. }
  19. }

继承

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. class Person(var name : String,val age : Int){
  7. println("main constructor")
  8. var gender : String = _
  9. def this(name : String,age : Int,gender : String) {
  10. this(name,age)
  11. this.gender = gender
  12. }
  13. }
  14. class Student(name : String,age : Int,val major : String) extends Person(name,age) {
  15. println("subclass is person,major is" + major)
  16. }
  17. object MyPerson {
  18. def main(args: Array[String]) {
  19. val s = new Student("admln",,"spark")
  20. }
  21. }

覆写父类的方法和字段

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. class Person(var name : String,val age : Int){
  7. println("main constructor")
  8. var gender : String = "mail"
  9. def this(name : String,age : Int,gender : String) {
  10. this(name,age)
  11. this.gender = gender
  12. }
  13. val school = "usa"
  14. }
  15. class Student(name : String,age : Int,val major : String) extends Person(name,age) {
  16. println("subclass is person,major is" + major)
  17. override def toString = "override method"
  18. override val school = "china"
  19. }
  20. object MyPerson {
  21. def main(args: Array[String]) {
  22. val s = new Student("admln",,"spark")
  23. println(s.toString)
  24. println(s.gender)
  25. }
  26. }

抽象类

  1. package org.admln.scala
  2.  
  3. class HelloScala {
  4.  
  5. }
  6. abstract class Person {
  7. def speak
  8. var name : String
  9. val age : Int
  10. }
  11. class Worker extends Person {
  12. def speak {
  13. println("speak")
  14. }
  15. var name = "admln"
  16. val age =
  17. }
  18. object HelloScala extends App {
  19. val worker = new Worker
  20. worker.speak
  21. println(worker.name + " " + worker.age)
  22. }

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

trait

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

  1. package org.admln.scala
  2.  
  3. class UseTrait {
  4.  
  5. }
  6. trait Logger {
  7. def log(msg : String) {
  8. println("log: " + msg)
  9. }
  10. }
  11.  
  12. class ConcreteLogger extends Logger {
  13. def concreteLog {
  14. log("It's admln")
  15. }
  16. }
  17.  
  18. object UseTrait {
  19. def main(args: Array[String]) {
  20. val logger = new ConcreteLogger
  21. logger.concreteLog
  22. }
  23. }

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

  1. package org.admln.scala
  2.  
  3. class UseTrait {
  4.  
  5. }
  6. trait Logger {
  7. def log(msg : String)
  8. }
  9.  
  10. trait ConcreteLogger extends Logger {
  11. def log(msg : String) {
  12. println("log: " + msg)
  13. }
  14. }
  15.  
  16. class Test extends ConcreteLogger {
  17. def test {
  18. log("It's admln")
  19. }
  20. }
  21.  
  22. object UseTrait {
  23. def main(args: Array[String]) {
  24. val test = new Test
  25. test.test
  26. }
  27. }

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

  1. package org.admln.scala
  2.  
  3. class UseTrait {
  4.  
  5. }
  6. trait Logger {
  7. def log(msg : String) {
  8. println("log: " + msg)
  9. }
  10. }
  11.  
  12. trait ConcreteLogger extends Logger {
  13. override def log(msg : String) {
  14. println(" child log: " + msg)
  15. }
  16. }
  17.  
  18. class Test extends ConcreteLogger {
  19. def test {
  20. log("It's admln")
  21. }
  22. }
  23.  
  24. object UseTrait {
  25. def main(args: Array[String]) {
  26. val test = new Test
  27. test.test
  28. }
  29. }

在对象中混入trait

  1. package org.admln.scala
  2.  
  3. class UseTrait {
  4.  
  5. }
  6. trait Logger {
  7. def log(msg : String) {
  8. println("log: " + msg)
  9. }
  10. }
  11.  
  12. trait ConcreteLogger extends Logger {
  13. override def log(msg : String) {
  14. println(" child log: " + msg)
  15. }
  16. }
  17.  
  18. class Test extends Logger{
  19. def test {
  20. log("It's admln")
  21. }
  22. }
  23.  
  24. object UseTrait {
  25. def main(args: Array[String]) {
  26. val test = new Test with ConcreteLogger
  27. test.test
  28. }
  29. }

apply方法和静态方法

  1. package org.admln.scala
  2.  
  3. class UsageOfApply {
  4.  
  5. }
  6.  
  7. class ApplyTest {
  8. def test {
  9. println("test")
  10. }
  11. }
  12.  
  13. object ApplyTest {
  14. def apply() = new ApplyTest
  15. def staticTest {
  16. println("It's static method")
  17. }
  18. }
  19.  
  20. object UsageOfApply {
  21. def main(args: Array[String]) {
  22. ApplyTest.staticTest
  23. val at = ApplyTest()
  24. at.test
  25. }
  26. }

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. php 的简单易用的调式方法,打印方法

    简单的调试方法:echo, print_r, var_dump, exit, debug_backtrace(), debug_print_backtrace(), gettype(), get_cl ...

  2. tmux的使用方法和个性化配置

    介绍 tmux是一个优秀的终端复用软件,即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失!此外,tmux完全使用键盘控制窗口,实现窗口 ...

  3. 如何判断Socket连接失效

    http://cuisuqiang.iteye.com/blog/1453632 ——————————————————————————————————————————————————————————— ...

  4. 异常处理与MiniDump详解(转)

    一.   综述 总算讲到MiniDump了. Dump有多有用我都无法尽数,基本上属于定位错误修复BUG的倚天剑.(日志可以算是屠龙刀)这些都是对于那些不是必出的BUG,放在外面运行的时候出现的BUG ...

  5. Linux下的grep搜索命令详解(一)

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  6. Xcode环境配置mysql

    本文默认mysql安装目录为/usr/local/mysql 在项目的header search paths中添加/usr/local/mysql/includ 2.在项目的library searc ...

  7. jshint 安装使用

    首先要安装nodjs, 参考另一篇文章: Ubuntu 编译安装node.js 然后运行 npm install jshint -g 之后在要扫描的目录下运行命令 jshint . >> ...

  8. HDU 4667 Building Fence

    题意: 给n个圆和m个三角形,且保证互不相交,用一个篱笆把他们围起来,求最短的周长是多少. 做法:--水过... 把一个圆均匀的切割成500个点,然后求凸包. 注意:求完凸包,在求周长的时候记得要把圆 ...

  9. jQuery plugins 图片上传

    http://plugins.jquery.com/ 用到一下插件: magnific popup 看大图 jQuery File Upload 多文件上传 jQuery Rotate 图片旋转 gi ...

  10. 完成端口(CompletionPort)详解

    手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                           ...