1.条件表达式

  1. object ConditionDemo {
  2. def main(args: Array[String]) {
  3. val x =
  4. //判断x的值,将结果赋给y
  5. val y = if (x > ) else -
  6. //打印y的值
  7. println(y)
  8.  
  9. //支持混合类型表达式
  10. val z = if (x > ) else "error"
  11. //打印z的值
  12. println(z)
  13.  
  14. //如果缺失else,相当于if (x > 2) 1 else ()
  15. val m = if (x > )
  16. println(m)
  17.  
  18. //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
  19. val n = if (x > ) else ()
  20. println(n)
  21.  
  22. //if和else if
  23. val k = if (x < )
  24. else if (x >= ) else -
  25. println(k)
  26. }
  27. }

2.块表达式

  1. val result = {
  2. if (x < ){
  3. -
  4. } else if(x >= ) {
  5.  
  6. } else {
  7. "error"
  8. }
  9. }

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

3.循环语句

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

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

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

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

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

练习:filter过滤

  1. a1.filter(_%==)

_表示每次输出的值

for循环通过角标开始

  1. fori <- to a1.length
  2. println(a1(i-))
  1. fori <- until a1.length
  2. println(a1(i))

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

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

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

  1. scala>-
  2. res1:Int = -
  3.  
  4. scala>.-()
  5. res2:Double = -2.0

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

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

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

6.方法和函数

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

  1. 方法定义:
  2. def m1(a:Int,b:Int):Int = x*y
  3. 方法调用
  4. m1(,)
  5.  
  6. 不写返回值的类型
  7. def m1(a:Int,b:Int) = x*y
  8.  
  9. 注意:但是递归是必须要有返回值类型的。

7.函数定义

  1. 定义一个函数,无名函数
  2. x:Int,y:Int)=>{x+y}
  3.  
  4. 有名函数
  5. val f1=(x:Inty:Int)=>{x+y}
  6.  
  7. 调用
  8. f1(参数)

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

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

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

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

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

  1. 匿名函数
  2.  
  3. a1.map((x:Int)=>x*)
  4.  
  5. 但是在a1中的参数都是知道的,这个时候就不需要指定数据的类型
    a1.map(x=>x*10)
  6.  
  7. 当然了最简单的方式是
    a1.map(_*100)

11.下划线的作用

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

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

总结:

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

  定义函数的方式

  1. Val fun=(x:IntyInt)=>操作
  2. Val fun1 = x:IntyInt)=>返回值[可以为任意的,可以是一个元祖
  3.  
  4. 返回值类型是可以设置的,也可以不需要设置的,因为元函数的返回值是可以自己推断出来的。] ={操作}
  5. Val fun2:(Int,Double)=>(Double,Int)={(x,y[因为只是将前面数据的定义了,但是并没有定义变量,所以这里的需要将变量定义出来。])=>具体的业务逻辑}
  6. 递归必须有返回值类型的
  7. 加入说没有返回值的时候,这个时候返回值是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. Activity 之间 传递 List 封装的对象或者对象

    项目中遇到 从也个页面向还有一个页面跳转传递一个List 封装的对象 .按网上查的资料 须要把 对象 实现 Serializable接口. 写了一下.可是跳转直接崩溃.一直看错误之日找不到原因后来自习 ...

  2. Python 面向对象与 C++、Java 的异同

    1. 子类是否自动调用父类的构造方法 C++.Java 会在子类对象的构造中自动首先调用父类的构造: Python 则相对啰嗦一点: 如果子类不覆盖父类的__init__()方法,则子类默认将执行与父 ...

  3. Server.MapPath()的用法

    http://blog.csdn.net/qiuhaifeng_csu/article/details/19416407 Server.MapPath(string path)作用是返回与Web服务器 ...

  4. 03011_预处理对象executeUpdate方法(实现数据库的增、删、改)

    1.概述 (1)通过预处理对象的executeUpdate方法,完成记录的insert\update\delete语句的执行: (2)操作格式统一如下: ①注册驱动: ②获取连接: ③获取预处理对象: ...

  5. [React] Define defaultProps and PropTypes as static methods in class component

    class Toggle extends Component { static propTypes = { defaultOn: PropTypes.bool, on: PropTypes.bool, ...

  6. Oracle 11gR2光钎链路切换crs服务发生crash

    Oracle 11gR2光钎链路切换crs服务发生crash 背景: 我们将Oracle 11gR2(11.2.0.4)在RedHat EnterPrise 5.8上通过RDAC完毕的多路径链路冗余. ...

  7. InstallShield详细制作说明(一)

    虽然网上关于InstallShield的制作说明已经很多,但是看的时候还是会有些晕乎乎的,不得不说很复杂.前段时候做了一次,后面需要升级,在重新做的时候发现有些地方自己又忘了,所以有必须将自己看的教程 ...

  8. java匿名内部类使用场景列举

    示例一: package com;      interface Operation {       double operateTwoIntNum(int a, int b);   }      p ...

  9. 通俗理解vuex原理---通过vue例子类比

    本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用 vuex其实是集中的数据管理仓库,相当于数据库mongoDB,MySQL等,任何组件都可以 ...

  10. CF1009F Dominant Indices(树上DSU/长链剖分)

    题目大意: 就是给你一棵以1为根的树,询问每一个节点的子树内节点数最多的深度(相对于这个子树根而言)若有多解,输出最小的. 解题思路: 这道题用树链剖分,两种思路: 1.树上DSU 首先想一下最暴力的 ...