1-Scala入门

前言

今天开始正式系统的学习Scala,记录博主的学习过程、解决遇到的问题。
参考数书籍:
《Scala编程》-第3版
Scala-2.12.8
安装使用:
Linux下安装可参考:https://blog.csdn.net/qq_38038143/article/details/88670650
Windows下安装可参考:http://www.runoob.com/scala/scala-install.html
安装包下载(包括windows和linux):
链接:https://pan.baidu.com/s/19yTh2RuC9_3aiNS1oaHz5g
提取码:4m0r
代码可以在GitHub中找到:
https://github.com/GYT0313/Scala-Learning

博主的所有操作都在Windows上进行,短语句使用scala编译器,长语句使用Sublime。

1. 第一节

  1. 使用CMD在窗口执行scala:
    在这里插入图片描述
  2. 定义变量
    有两种方式:
  • val 不可变
  • var 可变

显示指定变量的类型:
在这里插入图片描述
不指定类型,Scala自动推断变量类型(类型推断):
在这里插入图片描述
内容太长,换行输入,直接会车,会在下一行提示 | :
在这里插入图片描述

  1. 定义函数
    max 函数用于比较两个数的大小。() 中指定了参数和类型,(): Int 表示函数的返回值为Int 类型:
    在这里插入图片描述
    当然,不指定函数的返回类型,Scala会自动推断,简写:
    在这里插入图片描述
    另外,有些函数没有返回值可以指定为Unit 类型(相当于Java中的void),但是更加推荐第二种:
    在这里插入图片描述
  2. 编写脚本
    hello.scala 代码如下:
    通过 args 获取命令行参数
println("Hello, " + args(0) + "!")

CMD中执行:
使用scala 直接运行.scala,代表这个文件是一个脚本,而scala应用程序需要先编译再运行(下一节会展示如何编译运行一个scala程序)
在这里插入图片描述
5. 使用while
printargs.scala

var i = 0
while (i < args.length) {
  println(args(i))
  i += 1
}

在这里插入图片描述
这样的代码符合Java 的风格,但Scala有更简单的方法。

  1. foreach 和 for 遍历
    pa.scala
    foreach()中传入的称为函数字面量
args.foreach(arg => println(arg))

在这里插入图片描述
这里,Scala会推断arg 的类型,如果要显示的指出类型,你应该这样写:

args.foreach((arg: String) => println(arg))

另外,如果函数字面量是一个只接收单个参数的语句,你还可以这样写:

args.foreach(println)

如果不适用foreach函数,可以使用for 表达式,上述代码可以这样写:

for (arg <- args)
  println(arg)

2. 第二节

  1. 用类型参数化数组
    Scala 中可以使用new 来实例化对象或类的实例。
    在这里插入图片描述
    实例化一个数组:
    可以看到与Java不同,Scala的类型是写在[ ] 中。另外,你可以发现arrayString的类型为val,代表这个变量是不可变的。但是他指向的那个数组对象是可以改变的(即数组的赋值)。
    在这里插入图片描述
    打印:
    在这里插入图片描述
    其中 0 to 1会被转化为 (0).to(1),返回一个0,1 的序列。另外,在Scala 中 1 + 2,实际上执行的是 (1).+(2) ,+ 是Int 类型的一个方法(其他如 - * 等同理),比如:
    在这里插入图片描述
    除此之外,Array 数组中对其访问时调用apply() 方法,对其赋值时调用update() 方法,如:
    在这里插入图片描述
    初始化语句还可以这样写:
    在这里插入图片描述

  2. 使用列表
    Scala 中的列表是不可变的,元素必须是同种类型。
    在这里插入图片描述
    下面介绍列表的常用方法:因为列表不可变,所以下面返回的都是新的列表
    ::: 拼接列表:
    在这里插入图片描述
    :: 向头部添加元素(右操作元,比如 1+2 == (1).+(2) 为左操作元):
    在这里插入图片描述
    Nil 为空列表(等于 List()):
    在这里插入图片描述
    另一种创建列表的方式:
    在这里插入图片描述
    对长度为4的元素计数:
    在这里插入图片描述
    去掉头2个元素:
    在这里插入图片描述
    去掉后2个元素:
    在这里插入图片描述
    是否含有 “until”:
    在这里插入图片描述
    返回长度为4的元素:
    在这里插入图片描述
    过滤掉长度为4的元素:
    在这里插入图片描述
    遍历每个元素:
    在这里插入图片描述
    返回首个元素:
    在这里插入图片描述
    返回除了最后一个元素之外的元素:
    在这里插入图片描述
    是否为空:
    在这里插入图片描述
    返回最后一个元素:
    在这里插入图片描述
    返回元素个数:
    在这里插入图片描述
    对每个元素添加 “y”:
    在这里插入图片描述
    按一定规则返回所有元素:
    在这里插入图片描述
    反转:
    在这里插入图片描述
    按首字母小写排序:
    在这里插入图片描述
    返回除首个元素外的所有元素:
    在这里插入图片描述

  3. 使用元组
    元组也是不可变的,但它可以存储不同类型的数据。
    在这里插入图片描述
    其中,_1 和 _ 2代表的是字段,即对应元素的字段

  4. 使用集(set) 和 映射(map)
    Set 有可变和不可变类型,默认为不可变。
    在这里插入图片描述
    在这里插入图片描述
    调用可变的Set:
    在这里插入图片描述
    不可变映射:
    在这里插入图片描述
    可变映射:
    在这里插入图片描述

  5. 从文件读取文本行
    打印每行的字符数和内容:

import scala.io.Source
// 获得每行的字符数的长度,如12返回2
def widthOfLength(s: String) = s.length.toString.length

if (args.length > 0) {
  // 读取内容,并转换为列表
  val lines = Source.fromFile(args(0)).getLines().toList
  // 获取最大的字符数
  val longestLine = lines.reduceLeft(
    (a, b) => if (a.length > b.length) a else b
  )
  // 获取大字符数的位数
  val maxWidth = widthOfLength(longestLine)
  // 打印
  for (line <- lines) {
    // 计算需要的空格数
    val numSpace = maxWidth - widthOfLength(line)
    val padding = " " * numSpace
    println(padding + line.length + " | " + line)
  }
}
else
  Console.err.println("Please enter filename")

运行(注:运行时需要把中午注释删除,因为中文与字母所占字节不同)
在这里插入图片描述

后续篇章

2-类和对象(Scala)

完!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值