scala语言基础学习



1:书写递归函数的时候,必须指定返回类型,不然编译器无法校验递归函数的返回值
def fac(n:Int):Int = if(n<=0) 1 else n * fac(n-1)


2:当要往一个序列传入一个参数区间的时候可以加:_*
val s = sum (1 to 5 :_*)


def recursiveSum(args:Int*):Int={
if(args.length ==0) 0
elseargs.head+recursiveSum(args.tail:_*)
}




3:懒值
当一个变量被声明为lazy的时候,只有在第一次别调用的时候才会去初始化它的值。
lazy val words =scala.io.Source.fromFile("/usr/share.dict.words").mkString




4:ArrayBuffer可变长度的集合
val b = ArrayBuffer[Int]()
b+=1
b+=(1,2,3,4)
b++=Array(2,4,6,8)
b.toArray
b.toBuffer(将数组转换成数组缓冲)




5:数组转换
a.fliter(_ % 2==0).map(2*_)
for(elem<-a if elem % 2==0)yield 2*elem   ===》守卫模式


6:二维数组
val matrix = Array.ofDim[Double](3,4)   matrix(row)(column)
---不规则的二维数组
val triangle = new Array[Array[Int]](10)
for(i<-0 until triangle.length)
triangle(i) = new Array[Int](i+1)


7:类的学习
如果类属性不需要任何getter和setter可以将该字段声明为private[this]
Scala允许你将访问权赋予指定的类,private[类名]修饰符可以定义仅有指定类的方法可以访问给定字段,这里类名必须是当前定义的类或者包含该类的外部类


如果类名之后没有参数,该类具备一个午参主构造器,则会样一个构造器仅仅简单执行类体中的所有语句而已
class MyProg{
private val progs = new Properties
props.load(new FileReader("myprog.properties"))
}


类的伴生对象可以相互访问私有特性,他们必须存在于同一个源文件中 class Account{里面可以调用下面伴生对象的私有方法Account.def()进行调用}  Object Accout{}




每个包都可以有一个包对象,需要在父包中定义它,且名称和子包一样。
package com.hostman.impatient
package Object people{
val defaultName ="john"
}
package people{
class person{
var name = defaultName}
...
}




包引入的重命名还有隐藏
import java.util.{HashMap=>JavaHashMap}
import Scala.collection.mutable._
----隐藏(所有HashMap是指向Scala.collection.mutable.HashMap
import java.util.(HashMap=>_,_}
import Scala.collection.mutable._


隐式引入(后面引入的会覆盖前面引入的,针对同名类)
import java.lang_
import scala._
import Predef._


继承类的时候,继承抽象类时,重写抽象方法不需要写override,如果不是抽象方法,override是必须写的


文件读取
import scala.io.Source
val source = Source.fromFile("myfile.txt","UTF-8")
val lineIterator = source.getLines
for(1<-lineIterator){}
val lines = source.getLines.toArray
val contents = source.mkString


---读取字符
val source = Source.fromFile("myfile.txt","UTF-8")
val iter=  source.buffered
while(iter.hashNext){if(iter.head ...}


source.close()




循环遍历某目录下的所有子目录
import java.io.File
def subdirs(dir :File):Iterator[File]={
val children =dir.listFiles.filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subdirs _)
}
### Scala 基础语法 Scala 是一种多范式的编程语言,它支持面向对象和函数式编程风格。以下是关于 Scala 的一些基础语法要点: #### 文件扩展名与程序入口 Scala 源文件通常以 `.scala` 作为扩展名[^2]。一个完整的 Scala 应用程序需要定义 `main()` 方法作为其执行入口。 ```scala object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } } ``` 上述代码展示了如何通过定义一个名为 `HelloWorld` 的对象并实现 `main` 方法来构建最简单的 Scala 程序。 #### 大小写敏感性 Scala 对大小写非常敏感,这意味着变量名、类名和其他标识符中的字母区分大写和小写。 #### 自动分号推断机制 Scala 提供了一种自动分号推断的功能,即在大多数情况下无需手动输入分号结束语句。然而,在同一行中有多个表达式时,则需显式使用分号分割它们。 --- ### 移动开发教程 (Android) 对于希望利用 Scala 进行 Android 开发的学习者来说,《Scala on Android》是一个极佳的资源[^1]。该项目不仅提供了详细的文档说明还附带实际操作案例演示如何基于最新版本(如 Scala 2.13 或更高版)编写兼容于 Android 平台的应用程序。 要开始这个旅程可以从以下几个方面入手: - **环境搭建**: 需安装 JDK 和 Android Studio,并配置好 sbt 构建工具以便管理依赖项。 - **项目结构理解**: 学习标准目录布局及其作用域划分方式;熟悉 Gradle 脚本定制化设置过程。 - **实践演练**: 参考官方仓库内的 demo 工程逐步模仿完成属于自己的第一个作品! 下面给出一段示例代码用于展示如何初始化一个新的 SBT 项目并将目标平台设定为目标 API Level X 的安卓设备: ```sbt name := "MyFirstScalaApp" version := "0.1" scalaVersion := "2.13.8" platformTarget in Android := "android-30" ``` 此片段来源于网络公开资料整理而成并非直接摘录自任何特定出处因此未标注具体编号标记[^X]. --- ### 函数式编程简介 另外值得一提的是掌握一定的 FP 技巧同样重要因为这正是 Scala 设计理念之一——鼓励开发者采用更纯粹的方式解决问题从而减少副作用带来的复杂度提升可维护性和重用率等方面表现优异的结果呈现出来就是更加优雅简洁高效的解决方案形式展现给最终用户群体去体验享受科技进步所带来的便利之处所在位置不明所以无法提供确切引用依据故省略相应脚注处理措施采取默认忽略策略对待此类情况发生频率较低但仍需保持警惕以防万一出现意外状况影响整体质量水平下降风险存在可能性较大程度上取决于具体情况而定。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值