一.Scala简介:一种多范式的编程语言

(*)面向对象
(*)函数式编程:Scala的最大特点
(*)基于JVM

二.Scala的运行环境

(1)命令行:REPL
进入: scala
退出::quit
(*) paste 模式: 相当于vi编辑器
进入: :paste
退出: ctrl+D

(2)IDEA
(*) 默认:没有Scala的环境
(*) 需要安装插件:SBT(需要联网,有点慢)

(3)Scala IDE:基于Eclipse

3、数据的类型:基本数据类型
注意:(*)在Scala中,任何数据都是对象
举例:1 是一个对象,就有方法(函数)
scala> 1.toString
res0: String = 1 ====> 定义一个新的变量 res0;类型:String

(*)在定义变量的时候,可以不指定类型
Scala会进行类型的推导
以下两句话等价

val a:Int = 10
val b = 10

(1)数值类型: Byte、Short、Int、Long、 Float、 Double
Byte:8位的有符号数字 -128 ~ 127
Short: 16的有符号数字 -32768 ~ 32767
Int 32位
Long 64位

(2)字符串:字符和字符串 Char String
(*)在Scala中,对字符串有一个特殊操作:插值操作 ---> 前面有一个s

val s1="Hello World"

在下面的字符串中引用上面的s1

s"My name is ${s1}"

(3)Unit类型: 相当于Java中void
举例:val f = () 相当于我们定义了一个函数,并且把该函数的值付给一个变量f来保存

(4)Nothing类型: 一般来说,表示在执行的过程中产生了Exception
举例:定义函数 def
def myfunction = throw new Exception("Some Error....")

4、变量和常量
(*)val和var定义
(*)val 常量
        var 变量

5、函数(重要):头等公民
(1)内置函数
举例:求最大值 max函数

max(10,20)

(2)自定义函数: 关键字def
举例: 求和

def sum(x:Int,y:Int):Int = x + y

也等价于下面的语句

def sum(x:Int,y:Int):Int = {
x+y
}

注意:返回值不写return关键字,因为Scala中,函数的最后一句话就是函数的返回值

复杂一点的例子:求数的阶乘(递归)
//定义函数求数的阶乘

def myFactor(x:Int):Int = {
if(x <= 1)
1
else
x * myFactor(x-1)
}

//调用

myFactor(5)

6、条件判断: 在Scala中,if...else 是一个表达式,就有表达式的值
循环: for、while、do..while
还可以使用foreach进行迭代
7、函数的参数: 函数参数值的求值策略(call by value、 call by name)

(1)函数参数值的求值策略、
call by value:对函数的实参求值,仅求一次
举例:使用 :

def test1(x:Int,y:Int):Int = x + x

调用:

test1(3+4,8)

call by name:函数的实参每次在函数体内部被调用到的时候 都会求值
举例:使用 : =>

def test2(x: => Int,y: => Int):Int = x + x

调用:

test2(3+4,8)

注意:执行的过程是不一样的

稍微复杂一点的例子:
x是call by value,y是call by name

def bar(x:Int,y: => Int):Int = 1

定义一个死循环

def loop():Int = loop

调用:

bar(1,loop) //输出1
bar(loop,1) //死循环

(2)函数的参数
(*)默认参数

def func1(name:String="Tom"):String = "Hello " + name

调用

func1()

(*)代名参数:参数多的时候区分是哪一个

def func2(str:String="Good Morning ", name:String="Tom",age:Int=20):String
=
str + name + " and the age of " + name + " is " + age

调用

func2()
func2(age=25)

(*)可变参数: 求多个数字的和:*表示可变

def sum(args:Int*) = {
| var result = 0
| for(arg <- args) result += arg
| result
| }

scala>

sum(1,2,3)

8、懒值(lazy值)

如果一个变量是lazy,他的初始化会被推迟,直到第一次使用他的时候
举例:

scala> val x:Int =10
x: Int = 10 scala> val y:Int = x + 10
y: Int = 20 scala> lazy val z:Int = x + 10
z: Int = <lazy> scala> z
res7: Int = 20

9、异常:类似Java
10、数组、映射、元组

(*)数组二维数组:通过数组的数组来实现
(*)映射:就是一个<key,value>的Map集合
(*)元组: Tuple
(*)是不同类型的值的集合

val a1 = (1,2,3,"Hello") ===> 类型:Tuple4[Int, Int, Int, String]

val a2 = new Tuple4(1,2,3,"Hello") :4个元素。个数必须匹配

使用 _下划线来引用元组中的元素

a2._1
a2._2
a2._3
a2._4

遍历元组: 首先需要得到元组的迭代器

a2.productIterator.foreach(println)

大数据笔记(二十三)——Scala语言基础的更多相关文章

  1. 大数据笔记(十三)——常见的NoSQL数据库之HBase数据库(A)

    一.HBase的表结构和体系结构 1.HBase的表结构 把所有的数据存到一张表中.通过牺牲表空间,换取良好的性能. HBase的列以列族的形式存在.每一个列族包括若干列 2.HBase的体系结构 主 ...

  2. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  3. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  4. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  5. Scala语言基础

    1. Scala语言的特点 a. 多范式编程语言,面向对象(抽象.封装)和函数式(过程.结果)编程 b. 代码简洁 ==>可读性较差 c. 代码会被变异成Java字节码,运行在JVM上 2. S ...

  6. 决战大数据之二:CentOS 7 最新JDK 8安装

    决战大数据之二:CentOS 7 最新JDK 8安装 [TOC] 修改hostname # hostnamectl set-hostname node1 --static # reboot now 重 ...

  7. 大数据笔记(二十六)——Scala语言的高级特性

    ===================== Scala语言的高级特性 ========================一.Scala的集合 1.可变集合mutable 不可变集合immutable / ...

  8. 大数据入门第二十天——scala入门(二)scala基础01

    一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...

  9. 大数据spark学习第一周Scala语言基础

    Scala简单介绍 Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言.既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Ode ...

  10. 大数据笔记(二十四)——Scala面向对象编程实例

    ===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 c ...

随机推荐

  1. C++ Primer: 1. 初识输入和输出

    C++没有定义任何的输入和输出语句,而是使用了 标准库来提供IO机制---iostream; 标准库iostream定义了4种不同的IO对象: cin:     标准输入对象:instream类型的对 ...

  2. numpy-查找操作大全

    本文记录日常工作中遇到的查找操作,持续更新. 注意:输入必须是 数组,不能是 list 极值 min,max 返回极值 argmin(a, axis=None, out=None), 返回极值所在的位 ...

  3. The Preliminary Contest for ICPC Asia Shanghai 2019 A. Lightning Routing I

    传送门 因为某些原因,所以我就去学了 $LCT$ 维护直径, $LCT$ 维护直径我上一个博客讲得很详细了:传送门 这里维护虚儿子用的是 $multiset$ ,没写可删堆 #include<i ...

  4. Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。

    目标: Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭. 参考:http://v3.bootcss.com/javascript/#dropdowns    / ...

  5. java json对象转换

    引入的jar包: commons-beanutils-1.9.2.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logg ...

  6. eclipse经常弹出Subversion Native Library Not Available解决方案

  7. webpack4导入jQuery的新方案

    本文的目的 拒绝全局导入jQuery!! 拒绝script导入jQuery!! 找到一种只在当前js组件中引入jQuery,并且使用webpack切割打包的方案! 测试环境 以下测试在webpack3 ...

  8. 目标检测数据库 PASCAL 格式的 Ground Truth 的解析函数

    最近在做一个目标检测算法,训练时用到了 bootstrap 策略,于是我将PASCAL的 Ground Truth 格式的读取函数从 Matlab 改写为 C++.PASCAL 的标注格式为: # P ...

  9. java.util.Arrays (JDK 1.7)

    1.asList //返回由指定数组支持的固定大小的列表,返回的列表是可序列化的 public static <T> List<T> asList(T... a) { retu ...

  10. scp 自动带密码参数复制文件到主机

    一.安装sshpass工具 [root@zabbix_server scripts]# yum install sshpass 二.运行 [root@zabbix_server scripts]# s ...