1.条件表达式

object ConditionDemo {
def main(args: Array[String]) {
val x =
//判断x的值,将结果赋给y
val y = if (x > ) else -
//打印y的值
println(y) //支持混合类型表达式
val z = if (x > ) else "error"
//打印z的值
println(z) //如果缺失else,相当于if (x > 2) 1 else ()
val m = if (x > )
println(m) //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
val n = if (x > ) else ()
println(n) //if和else if
val k = if (x < )
else if (x >= ) else -
println(k)
}
}

2.块表达式

val result = {
if (x < ){
-
} else if(x >= ) { } else {
"error"
}
}

块表达式中一般最后一个参数就是表达式的返回值。

3.循环语句

for循环 1 to 10 ,to是一个方法,是将1到10数据产生

for的格式1: for(i <- res1)object ForDemo {

  def main(args: Array[String]) {
//for(i <- 表达式),表达式1 到 10返回一个Range
//每次循环将区间中的一个值赋给i
for (i <- to )
println(i) //for(i <- 数组)
val arr = Array("a", "b", "c")
for (i <- arr)
println(i) //高级for循环
//每个生成器都可以带一个条件,if前面没有分号
for(i <- to ; j <- to if i != j)
print(( * i + j) + " ")
println() //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
//每次迭代生成集合中的一个值,将i的值进行操作,将数据装入vector中。如果对数组进行操作,最后结果返回一个数组。
val v = for (i <- to ) yield i *
println(v)
}
}

练习:将一个1到9的数据中的偶数取出来。

//使用val更加的节省资源
val a1=Array(,,,,,,,,)
val a1=for(i<- a1;if(i%==)) yield i

练习:filter过滤

a1.filter(_%==)

_表示每次输出的值

for循环通过角标开始

for(i <-  to a1.length)
println(a1(i-))
for(i <-  until a1.length)
println(a1(i))

to是[]的操作,until是(]的操作

1 to 10  等同于 1.to(10)

5.在scala中是不存在操作符运算的,运算的底层都是使用方法来完成的。

scala>-
res1:Int = - scala>.-()
res2:Double = -2.0

对于为什么返回的是一个double,这是因为它将第一个1当做是double运算的,所以后来大印的就是double。

测试方法:将3定义成一个val a的值,1.-(a)结果仍为double,将1定义为一个val b的值,a.-(b)结果是int。

在源码中,方法的返回的类型和输入的参数是和传入参数有关的。

6.方法和函数

方法定义 def 方法名(参数列表):返回值类型 = 操作

方法定义:
def m1(a:Int,b:Int):Int = x*y
方法调用
m1(,) 不写返回值的类型
def m1(a:Int,b:Int) = x*y 注意:但是递归是必须要有返回值类型的。

7.函数定义

定义一个函数,无名函数
(x:Int,y:Int)=>{x+y} 有名函数
val f1=(x:Int,y:Int)=>{x+y} 调用
f1(参数)

8.函数有一个特性就是可以作为参数传入到方法里面。

定义一个函数
val f3=(x:int)=>x*
准备一个数组,将数组的值进行函数f3的操作
val a1=Array(,,,,,,,,)
a1.map(f3)

这也就是说函数式编程可以将数据的进行任意操作,这也是他的灵活性。

9.方法是通过方法名进行调用,函数是可以作为参数进行传递的。

10.a1.map(_*100) 将a1中数据乘以10.这个是不定义函数,也可以定义匿名函数

匿名函数

a1.map((x:Int)=>x*)

但是在a1中的参数都是知道的,这个时候就不需要指定数据的类型
a1.map(x=>x*10) 当然了最简单的方式是
a1.map(_*100)

11.下划线的作用

将方法转化为函数,如果一个函数的逻辑和方法的逻辑相同,那么就可以使用下面的方法将方法转换为函数。

def testZhanshu(x:Int,y:Int):Int = {
X+y;
}
将上面的方法转换为函数
Val fun2 = testZhanshu_

总结:

函数和方法的最大区别在于,函数可以作为参数进行传递。

  定义函数的方式

Val fun=(x:Int,y:Int)=>操作
Val fun1 = (x:Int,y:Int)=>返回值[可以为任意的,可以是一个元祖 返回值类型是可以设置的,也可以不需要设置的,因为元函数的返回值是可以自己推断出来的。] ={操作}
Val fun2:(Int,Double)=>(Double,Int)={(x,y[因为只是将前面数据的定义了,但是并没有定义变量,所以这里的需要将变量定义出来。])=>具体的业务逻辑}
递归必须有返回值类型的
加入说没有返回值的时候,这个时候返回值是Unit,调用之后,返回值是一个()

Scala基础知识(二)的更多相关文章

  1. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  2. 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理

    菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...

  3. Dapper基础知识二

    在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper?     首先Dapper是支持多种数据库的 ...

  4. python基础知识(二)

    python基础知识(二) 字符串格式化 ​ 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 ​ print(' %s is boy'%('tom')) ----> ...

  5. Java基础知识二次学习--第三章 面向对象

    第三章 面向对象   时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...

  6. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

  7. scala 基础知识总结

    在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...

  8. SCALA基础知识学习

    注:本文只说和Java不同的地方. 总结自: Scala详细教程 Scala教程 scala基础语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ";" 是 ...

  9. 快速掌握JavaScript面试基础知识(二)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  10. Scala基础知识[一]

    摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言.设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Jav ...

随机推荐

  1. 【HDOJ 5384】Danganronpa

    [HDOJ 5384]Danganronpa AC自己主动机. .. 当时感觉用字典树 标神也往自己主动机想来着..手太生加上时间紧迫也没敲--回来一看题解什么AB同一时候建自己主动机...顿时愣了 ...

  2. RvmTranslator6.3 is released

    RvmTranslator6.3 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...

  3. The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

    https://stackoverflow.com/questions/30045871/sorting-the-view-based-on-frequency-in-sql-server Just ...

  4. 浏览器加载跟渲染html的顺序-css渲染效率的探究

    1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...

  5. Codefroces Educational Round 26 837 C. Two Seals

    C. Two Seals time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. C# 将引用的DLL文件放到指定的目录下

    原文:C# 将引用的DLL文件放到指定的目录下 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sweety820/article/details/2 ...

  7. oracle跨数据库跨用户訪问注意事项

    java代码中不同意出现oracle的username.数据链路名. 跨用户.跨数据库的訪问必须在oracle中建同义词或视图来实现.在java代码中仅仅需当做当前用户下的对象处理.

  8. 关于Promise详解

    异步回调 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完成后才能执行后续的任务 ...

  9. Shiro学习总结(10)——Spring集成Shiro

    1.引入Shiro的Maven依赖 [html] view plain copy <!-- Spring 整合Shiro需要的依赖 --> <dependency> <g ...

  10. 不重新启动VMWare虚拟机加入虚拟磁盘的方法(上)

    近期因为业务须要在不重新启动系统的前提下对系统进行扩容,前提是该系统做过lvm.可是没有足够的物理卷(硬盘),所以引出了改文.本文共分为上下两部分.这是第一部分. 文件夹 加入磁盘 做LVM 加入硬盘 ...