一.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. [LeetCode] 矩形面积

    题目链接: https://leetcode-cn.com/problems/rectangle-area 难度:中等 通过率:41.3% 题目描述: 在 二维 平面上计算出两个 由直线构成的 矩形重 ...

  2. logstash7.3版本不支持从redis集群中拉取数据

    filebeat可以把收集到的日志传输到redis集群中,但是logstash如何从从redis集群中拉取数据的呢? ogstash使用的是7.3版本 经过查看官网文档,发现logstash7.3版本 ...

  3. java 正则表达式 复习

    正则表达式在日常开发中会经常的接触到,学会了正则可以更有效的对字符进行验证.拆分.替换.判断字符串是否合法等操作... 常用语法: 字符的取值范围 1.[abc] : 表示可能是a,可能是b,也可能是 ...

  4. fullpage实现(-)

    在线demo还没弄好,地址先给出来

  5. vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据

    <template> <div class="search-box"> <input class="box" :placehold ...

  6. [转载]克服FPGA I/O引脚分配挑战--xilinx系列

    转载走,放到自己的分类中好了 原文地址:I/O引脚分配挑战--xilinx系列">克服FPGA I/O引脚分配挑战--xilinx系列作者:方槍槍 http://www.eefocus ...

  7. java面试07——设计模式

    1.什么是设计模式 设计模式就是经过前人无数次的实践总结出的,设计过程可以反复使用的,可以解决特定问题的设计方法. 2.常用的设计模式有哪些 2.1单例模式(饱汉模式.饿汉模式.双重锁模式) http ...

  8. 树上独立集数量 树型DP

    题目描述: 对于一棵树,独立集是指两两互不相邻的节点构成的集合.例如,图1有5个不同的独立集(1个双点集合.3个单点集合.1个空集),图2有14个不同的独立集,图3有5536个不同的独立集.  输入: ...

  9. Vim搜索关键字

    有以下两种方法 Method 1:/content 默认从上往下查找 只读模式下输入 /content 后回车 按 n 向下查找 按N 向上查找 Method 2:?content 默认从下往上查找 ...

  10. 通过继承Thread类实现多线程

    (1)继承Thread类(2)重写run(方法(3)通过start0方法启动线程 一定的缺点: Java中的类是单继承的,一旦继承了Thread类,就不允许再去继承其它的类 线程和主方法之间的执行顺序 ...