方法

方法是打包在某个名字下的小程序。在使用方法时,也就是调用方法时就会执行

这个小程序。方法将一组活动组合起来并赋予一个名字,这就是组织程序的最基本方式。

scala 中方法的基本形式为

def methodName(arg1:Type1, arg2:Type2, ...):returnType = {
lines of code
result
}

类和对象

scala 不仅仅是面向对象语言,还是函数式语言。在函数式语言中,我们会考虑动词,即

希望执行的动作,并且通常会将这些动作描述成数学上的等式。

对象包含存储数据用的 val 和 var 也就是域,并且使用方法来执行操作。

类定义了域和方法,它们使类在本质上就是用户定义的新数据类型。

构建某个类型的 val 或 var 称为创建对象或创建实例。

我们甚至将注入 Double 和 String 这样的内建类型的实例也称为对象

在 scala 中,使用 RPEL 可以很容易的对类进行探究,这使得他具有补全代码的好功能。

Scala Doc

在线 Scala Doc 地址 https://www.scala-lang.org/api/current/index.html

创建类

对象是针对待解决问题的解决方案的有机组成部分。我们先将对象当做表达概念的方式,

如果你发现了待解决问题的某样“事物”,那么就将其看作解决方案中的对象。

创建类需要以 class 开头,后面跟着为心类起的名字。类名必须以大写英文字母开头。

类中的方法

在类中可以定义属于这个类的方法。

在方法中创建的方法并未出现在类的定义内部,但是事实证明,在 Scala 中所有的事物都是对象。

当我们使用 RPEL或运行脚本时, Scala 会将所有不在类的内部的方法以不可视的方式打包到一个对象的内部。

导入和包

使用 import 的一种方式是指定类名。

import packagename.classname

可以在单个 import 语句中将多个类组合起来。

import util.{Random, Properties}

如果想导入某个包中所有的事物,可以使用下划线。

import util._

值函数

函数也是对象,也可以像变量一样被赋值,把这种函数称为函数字面量(function literal) 或值函数。

 val sum =(x:Int, y:Int)=> {
println(x+y)
x+y
}

上面定义了一个没有名字的函数,然后将其赋值给变量 val sum。

可以看到赋值时,如同一个普通的变量赋值一样

(x:Int, y:Int) 为值函数的输入参数, => 为函数映射符。
表示将 => 左边的某种类型转换后其右面的某种类型。

{ } 中放置的是函数体,如果只有一行语句,则可以省略

 val sum=(x:Int, y:Int)=>x+y

上面的表达式称为 lambda 表达式,再上面的函数称为 Lambda  函数。

注意,值函数不能像普通函数那样指定其返回值类型,编译器会进行类型推导来确定函数返回值类型。

值函数的简化

值函数最常用的场景是作为高阶函数的输入

Array 的map 方法定义如下

  • def map(f: (A) ⇒ B): Array[B]

该方法使用了泛型,泛型 B 指的是数组最终返回的元素类型, f 表示作用于数组各个元素上的函数,

(A) => B 为函数类型,表示的是函数的输入参数类型是 A, 返回值类型是 B

下面进行加速简化

val increment=(x:Int)=>x+
arrInt.map(increment) increment: Int => Int = $$Lambda$/@bfb1f0
res5: Array[Int] = Array(, , , ) // 如果值函数只使用一次,则常常直接作为函数参数
arrInt.map((x:Int)=>x+) res6: Array[Int] = Array(, , , ) // 由于 arrInt 为整型数组,因此传入 map 的函数输入类型可以通过类型
// 推断得到,因此可以省略输入类型 arrInt.map((x)=>x+) res7: Array[Int] = Array(, , , ) // 参数只有一个时可以将值函数输入参数的括号去掉
arrInt.map(x=>x+) res8: Array[Int] = Array(, , , ) // 输入参数在 => 右边只出现一次,可以用占位符 _ 进一步简化
arrInt.map(_+) res9: Array[Int] = Array(, , , )

最后的代码之所以合法,是因为 arrInt 是 Int 类型的数组,可以进行类型推断。

scala 编程思想—学习笔记的更多相关文章

  1. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  2. Java编程思想 学习笔记1

    一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...

  3. [Java编程思想-学习笔记]第1章 对象导论

    1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...

  4. Java编程思想 学习笔记11

    十一.持有对象  通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...

  5. Java编程思想学习笔记——类型信息

    前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...

  6. Java编程思想 学习笔记12

    十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...

  7. Java编程思想 学习笔记10

    十.内部类  可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...

  8. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

  9. Java编程思想 学习笔记5

    五.初始化与清理 1.用构造器确保初始化  在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造 ...

随机推荐

  1. win10中shift+右键,在此处打开cmd窗口

    通过添加注册表项,实现右击“在此处打开命令行功能” 注册表位置:HKEY_CLASSES_ROOT\Directory\Background\shell\ win10系统用标识右键菜单打开命令行的键, ...

  2. CF特征码遍历

    HOOK_游戏代码 8B 00 8B 08 8B 91 A8 00 00 00 地址-15 4E5E954E5EA 44E5E95DIRECT 从733E00开始搜 6B 00 94 51 6C 地址 ...

  3. jzoj5347

    tj:80pts:維護f[i][j]表示當前第i個方塊必須選,且選了j個的最優解,設w[i]為第i個方塊長度 則可以枚舉上次選了第k個方塊,則f[i][j]=max{f[k][j-1]+w[i]*(i ...

  4. 从getwebshell到绕过安全狗云锁提权再到利用matasploit进服务器

    本文作者:i春秋签约作家——酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而 ...

  5. Kafka运行环境优化实践

    Kafka高性能的特点及条件 Kafka是一个高吞吐量分布式消息中间件,并且提供了消息的持久化功能.其高可行有两个重要的特点: 利用了磁盘连续读写性能显著高于随机读写性能的特点 并发,将一个topic ...

  6. 经典MVC框架技术-struts2基础知识

    Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...

  7. LoadLinked/StoreConditional (LL/SC)

    MIPS中LL/SC指令介绍 MIPS32中的LL.SC指令说明 理解MIPS指令集中的ll (load linked) 和 sc 你用ll指令读取一个内存中的数据并存到一个寄存器,然后在寄存器修改( ...

  8. springmvc执行流程详细介绍

    1.什么是MVC MVC是Model View Controller的缩写,它是一个设计模式 2.springmvc执行流程详细介绍 第一步:发起请求到前端控制器(DispatcherServlet) ...

  9. php引用使用不恰当而产生问题的地方

    php变量的引用,如果使用的恰当,会带来效率的提升,相反,效率下降 $array = range(, ); $ref =& $array; var_dump(count($array)); / ...

  10. 添加新内容的四个 jQuery 方法:append,prepend,after,before

    添加新内容的四个 jQuery 方法区别如下: append() - 在被选元素(里面)的结尾插入内容prepend() - 在被选元素(里面)的开头插入内容 //jQuery append() 方法 ...