Scala编程学习之一-scala概述

1.1why is Scala语言?
1)Spark—新一代内存级大数据计算框架,是大数据的重要内容。
2)Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。【海量数据的采集,存储,计算分析【mapreduce,Spark】/ [java,python,scala主力]】
3)Scala 是 Scalable Language 的简写,是一门多范式(编程的方式[面向对象编程,函数式编程])的编程语言
4)联邦理工学院洛桑(EPFL )的Martin Odersky于2001/2003推出 年开始设计Scala
Spark的兴起,带动Scala语言的发展!

1.2Scala语言诞生小故事
1)创始人马丁·奥德斯基(Martin Odersky)是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala, 即底层编译器支持)
2)Pizza和Scala极大地推动了Java编程语言的发展。[如何理解?]
3)jdk5.0 的泛型,for循环增强, 自动类型转换等,都是从Pizza 引入的新特性。
4)jdk8.0 的类型推断,Lambda表达式就是从scala引入的特性。
且现在主流JVM的javac编译器就是马丁·奥德斯基编写出来的。Jdk5.0 Jdk8.0的编译器就是马丁·奥德斯基写的,因此马丁·奥德斯基 一个人的战斗力抵得上一个Java开发团队。
1.3Scala 和 Java 以及 jvm 的关系分析图
在这里插入图片描述
scala与java及jvm的联系

1.4Scala语言的特点

Scala是一门以java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起
的静态类型编程语言。

1)Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala支持面向对象和函数式编程
2)Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。[案例演示]
3)scala 单作为一门语言来看, 非常的简洁高效 【三元运算符, ++ --】
4)Scala 在设计时,马丁·奥德斯基 是参考了Java的设计思想,可以说Scala是源于java,同时马丁·奥德斯基 也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学,只要在学习Scala的过程中,搞清楚Scala 和 java相同点和不同点,就可以快速的掌握Scala这门语言
5)快速有效掌握Scala的建议 [1. 学习sala独有的内容(语法,功能)2 搞清楚scala 和java的区别,3 如果正确的规范的使用scala

1.5Windows下搭建Scala开发环境
这里不再赘述
如不动搭建scala开发环境请另行百度/Google

1.6Scala的hello world
1.6.1
要求开发一个Hello.scala 程序,可以输出 “hello,世界scala!" [对scala程序基本结构说明]
1.6.2开发的步骤和说明(使用记事本开发)
可以直接使用文本开发工具notepad++
1)将 Scala 代码编写到扩展名为 Hello.scala 的文件中。
[ 说明: 比如将源码在目录 d:/scalademo下 ]
2)通过 scalac 命令对该 scala 文件进行编译,生成 .class 文件。[和javac类似]
3)命令行下 执行 scala Hello 就可以看到运行效果。
4)注意:scala Hello.scala 命令可以直接运行 Hello.scala 程序 [内部也会有编译和运行过程]

scala hello world代码

//对scala的基本的程序结构说明
//1. object 是一个关键字,表示一个伴生对象
//2. 如果该文件只出现了一个object HelloScala 就会在编译后两个.class文件
//3. 第一个文件是HelloScala.class 这个表示他的伴生类,但是空的.
//4. 第2个文件是HelloScala . c l a s s o b j e c t H e l l o S c a l a , M O D U L E .class 对应的是object HelloScala,但是本质是调用它对应的一个静态属性 MODULE
//5. 这两个文件的关系和main函数的入口关系后面有分析
object HelloScala {
// 1. def 表示一个方法或者一个函数
// 2. main 表示入口
// 3. args: Array[String] 表示形参,args 是形参名 Array[String] 是形参类型表示一个Array数组
// 4. :Unit 表示返回值类型为 Unit ,等价于java 的void
// 5. = 表示 后面写的是函数体/方法体, 它还有返回值类型推导的作用
def main(args: Array[String]):Unit = {
// 表示是 输出, 类似System.out.println(“hello, scala世界!”)
// 在scala 语句后,不需要带; //体现简洁
println(“hello, scala世界!”)
}
}
1.6.3 Scala HelloWorld的反编译
1)看反编译代码
2)模拟代码
//类
public final class HelloScala2
{
public static void main(String[] paramArrayOfString)
{
HelloScala2 . M O D U L E .MODULE .main(paramArrayOfString);
}
}

final class HelloScala2$
{
public static final HelloScala2$ MODULE$;

static
{
    MODULE$ = new HelloScala2$();
}
public void main(String[] args)
{

    System.out.println("hello,scala!~~~~~~ 模拟");
}
//private HelloScala$() { MODULE$ = this; }

}

扫描二维码关注公众号,回复: 4339077 查看本文章

1.6.4为什么一个object A,对应两个class 文件
在这里插入图片描述
1.6.5Scala程序开发注意事项(重点)
1)Scala源文件以 “.scala" 为扩展名。
2)Scala程序的执行入口是main()函数。
3)Scala语言严格区分大小写。
4)Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性。
5)如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号(尽量一行就写一条语句)。

1.6.6Scala语言输出的三种方式
1)字符串通过+号连接(类似java)。
2)printf用法 (类似C语言)字符串通过 % 传值。(格式化输出)
3)字符串通过$引用(类似PHP)。
4)代码
package com.atguigu.chapter01

object InputDemo {
def main(args: Array[String]): Unit = {
val name:String = “tom”
val age:Int = 10
val sal:Double = 7890.144
//格式化输出
//sal=%.2f 保留小数点两位的方式输出(四舍五入)
printf(“name=%s age=%d sal=%.2f\n”, name, age, sal)
//字符串通过 ( P H P p r i n t l n ( s " n a m e = 引用(类似PHP)。 println(s"name= name age= a g e + 1 s a l = {age+1} sal= sal sum2=${sum2(23,90)}")
}
//函数/方法
def sum2(n1:Int,n2:Int): Int = {
return n1 + n2
}
}

猜你喜欢

转载自blog.csdn.net/smsmtiger/article/details/84591067