Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
Scala的基础类型基本与javascript一致。

Scala的数据类型全部相同于Java中,具有相同的内存占用和精度。以下表是有关可在Scala中所有的数据类型的细节:

数据类型 描述
Byte 8位有符号值。范围从-128到127
Short 16位有符号值。范围从-32768至32767
Int 32 位有符号值。范围从 -2147483648 to 2147483647
Long 64位有符号值。 从-9223372036854775808到9223372036854775807
Float 32位IEEE754单精度浮点数
Double 64位IEEE754双精度浮点数
Char 16位无符号Unicode字符。范围由U+0000至U+FFFF
String 字符序列
Boolean 无论是字面true或false字面
Unit 对应于没有值
Null 空或空引用
Nothing 每一个其他类型的子类型; 包括无值
Any Any类型的超类型;任何对象是任何类型
AnyRef 任何引用类型的超类型

变量声明

Scala的变量声明有不同的语法,它们可以被定义为值,即,常量或变量。下面是使用var关键字来定义一个变量的语法:

var myVar :String="Foo"

在这里,myVar使用关键字var声明。这意味着它是一个可以改变值的变量,被称为可变变量。下面是使用val关键字来定义变量的语法:

val myVal :String="Foo"

这里,myVal是使用关键字val声明。这意味着,它是不能改变的变量,这是所谓的不可变变量。

变量数据类型:

变量类型在变量名后面指定,前在equals之前签署。可以通过它的数据类型定义任何类型的Scala变量如下:

val or val VariableName:DataType[=InitialValue]

如果不指定任何初始值变量,那么如下所示它是有效的:

var myVar :Int;
val myVal :String;

变量类型推断:

当分配一个初始值给一个变量,Scala编译器可以计算出根据分配给它的值的变量类型。这就是所谓的变量类型推断。因此,可以写这些变量的声明如下这样:

var myVar =10;
val myVal ="Hello, Scala!";

在这里,默认情况下,myVar是int类型

方法定义如下:
函数定义与python有点巧像,唯一奇葩的时,参数名放类型前面,加:隔开。返回值跟在函数参数之后。
有点搞特殊。
 
def f(x: Int) = { x*x }
def f(x: Any): Unit = println(x)
 
无参数的函数调用时可以省略括号。
names foreach (n => println(n))
names mkString ","
optStr getOrElse "<empty>"
 
 
def add(i:Int,j:int):int{
    return i+j
}
 
变长参数
def add(x:Int*) = {
    for(i <- x) {
        println(i)
    }
    x.sum
}
def main(args:Array[String]):Unit{
    add(10,10,10)
    add(1 to 10: _*)
}
 
Scala如何定义静态方法:  Scala默认没有静态方法,如果需要静态方法,可以通过定义Object类,在Object里面定义方法(看后面文章)。
Scala和c++一样,都具有默认参数,和python类型,可以指定参数赋值。唯一不同的就是他的变长参数。
 
 
for( i <- 1 to 10 if i % 2 == 0) {
    println(i)
}
 
for(i <- 0 until Array.lenth){
    println(i)
}

for(i <- 0 to 10 reverse)print(i)

 
val foo = for (x <- 0 until (10, 2)) yield x
 
for (i <- Array_name) {
    //todo
}
scala> 1.to(10)
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,
 9, 10)
scala> 1.until(10)
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
 
 
同样的,也可是是异常处理的。

scala中德模式匹配不仅仅可以对模式进行匹配,还可以对case class/object(最最重要的) ,还有类型匹配。(向上/下类型)转化都可以匹配。

scala中的match语句用来在一个列表中选择某一个分支来执行分支的语句块,类似于其他语言中的swtich..case语句

下面是一个简单的例子

var myVar ="theValue";
myVar match {
   case"someValue"   => println(myVar +" 1");
   case"thisValue"   => println(myVar +" 2");
   case"theValue"    => println(myVar +" 3");
   case"doubleValue"=> println(myVar +" 4");}

有些时候case 要捕获一些默认情况.

第一种值匹配
第二种类型配置
第三种,Array,list等容器的匹配
第四种,case calss样式类

Scala类型声明与定义、函数定义、流程控制、异常处理的更多相关文章

  1. MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)

    今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...

  2. MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)

    mysql致力于项目开发及数据库管理之间解耦合(帮忙封装一些数据处理方法,使应用程序的开发者可以专注于应用程序的开发),但受限于不同部门沟通的成本问题,现阶段直接使用的价值不大. 一.视图(只能sel ...

  3. [MySQL数据库之Navicat.pymysql模块、视图、触发器、存储过程、函数、流程控制]

    [MySQL数据库之Navicat.pymysql模块.视图.触发器.存储过程.函数.流程控制] Navicat Navicat是一套快速.可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降 ...

  4. 14 MySQL--事务&函数与流程控制

    一.事务 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 一堆sql语句:要么同时执行成功,要么同时失败 # 事务的原子性 场景: ...

  5. mysql:视图、触发器、事务、存储、函数、流程控制

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 回到顶部 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只 ...

  6. Generator函数在流程控制中的应用

    扯蛋 做了两年的Nodejs全栈开发,不知道为什么跑来做游戏呢(大概是厦门nodejs不好找工作吧).用的是网易的pomelo的游戏框架.现接手了一个棋牌游戏:二十一点,不懂的规则的可以自行百度. 二 ...

  7. Scala深入浅出实战经典-----002Scala函数定义、流程控制、异常处理入门实战

    002-Scala函数定义.流程控制.异常处理入门实战 Scala函数定义 语句结束无分号 定义无参函数 def 函数名称(参数名称:参数类型)[:Unit=]{ 函数体 } 老师的代码 我的实际代码 ...

  8. Scala(一):函数、流程控制、参数

    Function:函数函数的定义: def 函数名(参数):返回类型=函数实现体 eg:def abs(x:Long) : Long = if(x >= 0) x else -x 你必须给出所有 ...

  9. js的数据类型、函数、流程控制及变量的四种声明方式

    运算符 基本运算符 加 + 减 - 乘 * 除 / 取余 % 自增 ++ eg: 1++ 或 ++1 自减 -- eg: 1-- 或 --1 注:++或--写在前面表示优先级最高,先进行自增或者自减 ...

随机推荐

  1. android开发MD5加密工具类(一)

    MD5加密工具类整理: package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.secu ...

  2. C#l连接OPC进行数据交互

    步骤 :引用 OPCNETAPI.DLL&&OPCNETAPI.COM.DLL 1.查询服务器      2. 连接服务器  3. 读取数据     4.写入数据 1.查询服务器 :根 ...

  3. UI事件之unload、resize和scroll

    unload事件 当页面卸载或用户从当前页面换到其他页面上时,会在window上触发unload事件.根据DOM2级规范规定,unload应该在body上触发,但所有浏览器都实现了在window上触发 ...

  4. 初识Linux 命令

    1.linux基本原则 (1)有目的单一的小程序组成:组合小程序完成复杂任务 (2)一切皆文件 (3)尽量避免捕获用户接口 (4)配置文件保存为纯文本格式 2.命令格式 命令 选项 参数 短选项 - ...

  5. MySQL如何使用索引 较为详细的分析和例子

    在数据库表中,使用索引可以大大提高查询速度. 假如我们创建了一个 testIndex 表: CREATE TABLE testIndex(i_testID INT NOT NULL,vc_Name V ...

  6. jquery学习笔记之二

    1.one()与bind()的区别 bind():给一个对象绑定事件,可以绑定一个事件,也可以绑定多个事件. one():跟bind一样,都是给对象绑定事件的. 如给一个按钮绑定了三个相同的click ...

  7. jQuery二级联动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JQuery DataTables Editor---页面内容修改&&数据库信息修改 (2)

    接上篇博文,详细说一下js代码以及JQuery DataTables Editor---页面内容修改&&数据库信息修改遇到的问题和解决办法. 1.关于dialog 初始化: $(&qu ...

  9. JQuery DataTables Editor---只修改页面内容

    近来在工作中需要对JQuery DataTables进行增,删,改的操作,在网上找了一些资料,感觉比较的好的就是(http://editor.datatables.net/)文章中所展示的操作方法(如 ...

  10. [问题解决]LaTex 进行中文文档操作

    第一步,在\documentclass后输入 \usepackage{fontspec, xunicode, xltxtra} \usepackage{xeCJK}%中文字体 \setCJKmainf ...