1.val vs var val: 值 final val 值名称:类型 = xxx var: 变量 可变 var 值名称:类型 = xxx 2.Scala 基本数据类型 Byte/Char Short /Int/Long/Float/Double Boolean 类型转换基本操作 scala> var d = 1.1 d: Double = 1.1 scala> var e:Float = 1.1 e:Float = 1.1f e: Float = 1.1 scala> val f = 10 f: Int = 10 scala> val g = 10.asInstanceOf[Double] g: Double = 10.0 scala> val h = 10.isInstanceOf[Int] h: Boolean = true 3.Lazy在Scala中的使用 定义的时候不会执行,只有在第一次使用的时候才会执行 : String = <lazy> scala> info res10: String = "hello " scala> 4.Scala 常用IDE IDEA: Eclipse: NetBeans
Scala入门 Scala简介 ps:在最新的薪资调查中,Scala程序员的工资是平均最高的Scala工资。 def nb1 = x // public method computed every time it is called def nb2 } new MyClass(1, 2) // creates a new object of type 继承 继承和Java的语法类似。 数值类型 Scala的数值类型包含: Byte 1字节 Short 2 Int 4 Long 8 Foat Double 高精度类型 a = 低精度类型 b (同c自动转换) 低精度类型 b = 高精度类型 {exp1;exp2} { exp1 exp2 } 循环 第五步使用while来实现循环,和使用Java实现无太大差异,而Scala是面向函数的语言,更好的方法是采用“函数式”风格来编写代码。
在scala专栏已经写过两篇博文,为大家详细地介绍了如何在windows上安装scala并与IDEA进行集成。 相信大家可能已经把环境都配置好了,但可能对scala的概念还是一个未知数。所以小菌打算出一个scala快速入门系列,供大家学习使用。 作为快速入门系列第一篇博客,本篇博客先为大家带来scala基本介绍。 ? 简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程。 早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和 Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性。 作为scala快速入门系列的第一篇博文,我也不想整太多的花里胡哨~有更多的疑惑可以自行解决,也可以私信问我。作为scala快速入门系列,力求快狠准,攻克大家的疑点,难点。
Scala 与 Java Scala 与 Java 关系密切,体现在下面几点: Scala 运行在 JVM 上, Scala 可以与企业现有 Java 应用同时运行 Scala 可以直接使用 Java 类库, 开发人员可以利用现有框架以及代码 Scala 与 Java 都是镜台语言 Scala 语法和Java 语法相近, 开发人员可以迅速掌握 Scala Scala 既支持面向对象范型也支持面向对象范型 ,开发人员可以逐步运用函数式编程思想 Scala 诞生 了解了 Scala 的特性之后,我们追本溯源, 了解下 Scala 的诞生起源。 Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。 瑞银集团把Scala用于一般产品中。 Coursera把Scala作为服务器语言使用。 Kafka 核心也是Scala 实现的。 函数式语言 面向对象的特性得以使应用平滑的从 Java 迁移到 Scala,但是Scala惹眼的是其函数式编程的特性。
下载 https://www.scala-lang.org/download/2.13.8.html 或者 链接:https://pan.baidu.com/s/1r8qjJ2fE4yqBF82YBIqvHg 提取码:psvm 选择MSI包 注意安装路径不能有空格否则报错 此时不应有 \scala\bin.. 测试是否可用 scala -version IDEA安装插件 安装后重启IDEA 创建项目 项目上右键 添加Scala SDK 添加我们的测试类 代码如下 package cn.psvmc } } 遍历 object Test { def main(args: Array[String]): Unit = { // 遍历List val list = List(1, 2, println(user) // 方式1 for ((k, v) <- user) { printf("Key:%s Value:%s\n", k, v) } //方式2
Scala入门 Scala简介 ps:在最新的薪资调查中,Scala程序员的工资是平均最高的Scala工资。 def nb1 = x // public method computed every time it is called def nb2 } new MyClass(1, 2) // creates a new object of type 继承 继承和Java的语法类似。 数值类型 Scala的数值类型包含: Byte 1字节 Short 2 Int 4 Long 8 Foat Double 高精度类型 a = 低精度类型 b (同c自动转换) 低精度类型 b = {exp1;exp2} { exp1 exp2 } 循环 第五步使用while来实现循环,和使用Java实现无太大差异,而Scala是面向函数的语言,更好的方法是采用“函数式”风格来编写代码。
由于做大数据开发,使用最多的语言就是scala和python,java。 刚开始由于spark是scala开发的,就去学习了scala,然后看spark的源码。 后面就是基于spark-core写原生scala的应用。总体来时, scala使用是真的丝滑和顺手。尤其函数式编程。我开发flink也是使用scala。目前很少使用Java了。 我下面就系统介绍一下,scala的内容学习, 我自己也做一个系统的学习补充吧。 这篇主要从scala入门介绍。 Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala支持面向对象和函数式编程 Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上 String] = lines.flatMap(_.split(" ")) val wordToOne: RDD[(String, Int)] = words.map((_, 1)) // tuple 2
本篇博客,作为scala快速入门系列的第二篇博客,为大家带来的是关于scala解释器的初步使用! ? 后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代码,马上就可以让我们看到执行结果,用来测试比较方便。 我们将要学习: 启动scala解释器 在scala解释器中执行scala代码 退出scala解释器 ---- 启动scala解释器 要启动scala解释器,只需要以下几步: 按住 windows键 + r 输入 scala 即可 ? 执行scala代码 在scala的命令提示窗输入 println("hello , world"),回车执行。 ?
val b = Array(1,2,3) b: Array[Int] = Array(1, 2, 3) scala> b.sum res2: Int = 6 scala> b.max res3: list res27: Int = 1 scala> l.tail res28: List[Int] = List(2, 3, 4, 5) scala> val l2 = 1 :: Nil // 使用 ::拼接一个新的list l2: List[Int] = List(1) scala> val l3 = 2 :: l2 l3: List[Int] = List(2, 1) scala> val res29: l5.type = ListBuffer(2) scala> println(l5) ListBuffer(2) 4. Set scala> val s = Set(1,2,3,3,4,5) s: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4) scala
1.初识Scala 1.1 Scala概述 image.png Scala 是整合了面向对象和函数式边恒的高级编程语言。 1.2 学习Scala的意义 钱多 做东西:Spark,Kafka,Flink 生态系统 代码优雅 开发速度快 融合到生态圈 1.3 Scala安装 1. 安装Java8 2. 验证 ➜ scala-2.11.8 scala Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171). scala> 1.3 Scala使用入门 scala> 1+3 res1: Int = 4 // 自动识别类型 scala> res1 * 3 //自动给返回结果赋值给变量 res2: Int = 12 scala> res0 * res1 res3: Int = 16 scala> println("hello word") hello word scala> 1.4 Scala和Java版本Hello
Scala 中提供了基于是否匹配某个条件来执行相应动作的模式匹配,这很类似其他语言的switch-case语句。 我们以一个划分学生期末成绩等级的例子来解释 Scala 模式匹配的用法: package com.byron4j.scala.basic /** * Scala 模式匹配的用法 */ object
迭代器 学自 https://www.runoob.com/scala/scala-tutorial.html 1. [String](3) // 两种方式定义 z1(0) = "michael"; z1(1) = "scala"; z1(2) = "!" ) // scala.collection.immutable.Set$Set3 println(set.exists(_%2 == 0)) // true println (set.drop(1)) // Set(2, 3) println(set) // Set(1, 2, 3) // 可变集合 import scala.collection.mutable = Set("michael", "scala") var s0 = s1 ++ s2 println(s0) // Set(michael, ming, scala)
Scala面向对象 1.面向对象概述 封装:属性方法封装到类中 继承:父类和子类直接的关系 多态:***** 父类引用指向子类对象 精髓所在,开发框架的基石 2.类的定义和使用 package com.gwf.scala.course04 val i:Int = _ ^ scala> var i:Int = _ i: Int = 0 scala> var s:String = _ s: String = null scala> 3 = s"Student($country, $school)" } 6.抽象类 /** * 类的一个或者多个方法没有完整的实现(只有定义,没有实现) */ abstract class Person2{ def speak var name:String var age:Int } /** * 普通了继承抽象类要实现未实现的抽象方法和抽象属性 */ class Student2 extends Person2{ override def speak: Unit = println("speak") override var name: String = _ override var age:
Actor Scala 的 Actor 类似于 Java 中的多线程编程。但是不同的是,Scala 的 Actor提供的模型与多线程有所不同。 Scala 的 Actor 尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况,进而提升多线程编程的性能。 Akka 也实现了类似 Scala Actor的模型,其核心概念同样也是 Actor。 "Li" 收发 case class 类型的消息 Scala 的 Actor 模型与 Java 的多线程模型之间,很大的一个区别就是,Scala Actor 天然支持线程之间的精准通信;即一个 actor 在 Scala 中,通常建议使用样例类,即 case class 来作为消息进行发送。然后在 actor 接收消息之后,可以使用 Scala 强大的模式匹配功能来进行不同消息的处理。
Java中的变量在程序运行中可以动态的改变其值,如 int a = 1; int b = 2; a = a + b; 与Java类似的,Scala中对应有 val、var对应常量和变量的定义。 var 变量 Scala 中可以使用 var 来修饰变量。 package com.byron4j.scala /** * * 展示Scala 变量的方式 * val: 相当于java中的final常量,一旦给val变量赋值,则val变量不可以再做修改 val a = Array(1, 2) for( key <- a ){ println("遍历输出数组值:" + key); } Scala 是一门函数式编程语言,在Scala 中大量使用了 val 常量的定义, 在 Scala 中应尽量减少 var 的使用。
第二步安装 Scala: 下载 Scala 登录 http://www.scala-lang.org/download/ 选择下载最新的 Scala 版本 解压、设置 环境变量(没有经验的参考http 使用 scala -version 命令查看当前 Scala 的版本; 使用 scala 命令则直接进入 Scala 解释执行器中: C:\Users\Administrator>scala Welcome scala> 我们可以输入简单的一条 Scala 语句输出”Hello,Scala!” scala> println("Hello,Scala!") Hello,Scala! scala> 至此,Windows 安装Scala 环境完成。 Linux中Scala运行环境的安装配置 Linux 下安装Scala环境步骤和Windows下类似,也是需要先安装JDK、再安装Scala。 可以自行查看网上相关资料安装。
一般来说,学Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM 之间的关系搞清楚,否则学习Scala你会蒙圈。 1)Scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。 2)Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。 早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和 Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性。 接下来,我们要来学习: 1.为什么要使用scala? 2.通过一个案例对比Java语言和scala语言 四.
Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。 与接口不同的是,它还可以定义属性和方法的实现。 一般情况下Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承。 所以其实 Scala Trait(特征)更像 Java 的抽象类。 3) val p2 = new Point(2, 4) val p3 = new Point(3, 3) println(p1.isNotEqual(p2)) println(p1.isNotEqual (p3)) println(p1.isNotEqual(2)) }} 执行以上代码,输出结果为: $ scalac Test.scala $ scala Testfalsetruetrue 特征构造顺序
Scala 函数高级操作 1. 匿名函数 // 直接定义 scala> (x:Int) => x+1 res19: Int => Int = <function1> // 赋值给变量 scala> val m1 = (x:Int) => x+1 m1: Int => Int = <function1> scala> m1(10) res20: Int = 11 // 赋值给函数 scala> def add = (x:Int, y:Int)=>{x+y} add: (Int, Int) => Int scala> add(2,3) res21: Int = 5 3. currying 函数 def sum(a:Int,b:Int )= a+b println(sum(1,2)) // 将原来接收两个参数的一个函数,转换成2个 def sum2(a:Int)(b:Int) = a+b println(sum2(1)(2))
package com.byron4j.scala.basic object ForCycleDemo { def main(args: Array[String]): Unit = { 10 ){ print(result + " ") } println //使用步长的方法生成序列 for( result <- Range(0, 20, 2) ){ print(result + " ") } } } 输出结果为: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 2 4