【SCALA】1、我要开始学习scala啦
2024-08-26 21:41:16
因为scala也是基于jvm上运行的,所以能跑java,原则上就能跑scala
1、国际惯例,先来个hello world走走
package demo1 //object之下全为静态,scala没有static这玩意
object HelloWorld { //def 函数定义 args参数 后面接冒号然后是参数类型java反着来的,如果是java,那么就是String args[]
//最后main() 之后接 : 然后是这个函数反馈的类型 Unit代表没有反馈类型
def main(args : Array[String]) : Unit = {
//进去之后,该怎么样就怎么样。。。。
//还有scala可以不用写分号哦,真是为国家省布料。。。。
println("hello world")
} }
2.好,然后我们简单写几个程序,标识scala的基础入门吧
文件操作
package demo1 import java.io.File import scala.io.Source object FileDemo2 { def widthOfLength(s : String) = s.length.toString.length def fileLines(file : File) = Source.fromFile(file).getLines().toList
//静态变量
val filesHere = new File("./src/demo1").listFiles() def grep(pattern : String) =
//这里用()或者 {}都可以
for {
//遍历所有文件
file <- filesHere
if file.getName.endsWith(".scala");
//遍历这个文件的所有行
line <- fileLines(file)
if line.trim.matches(pattern)
} {
println(file + " : " + line.trim)
} def main(args: Array[String]): Unit = { 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")
} grep(".*main.*") } }
这个功能用java实现,没个几百行估计搞不定。。。
光是文件输入输出的io操作代码,什么File = new File 什么InputStream,什么ReaderBuffer一堆的估计就要写个十几行
然后这里scala比较惊喜的是循环,特别是for循环,那是真的比较强大了
3.最后我们来看看for这个循环再scala中的应用为啥那么强大吧,特别是yield的使用,真是很方便了,直接避免了我们java中再for循环,或者while循环等等需要保存对象的时候的list.add操作,这里直接准备好丢给你,就看你要不要
要的话加个yield,不要就不加,很方便
package demo2 class FileDemo2 { def makeRowSeq(row : Int) =
for(col <- 1 to 10) yield {
val prod = (row * col).toString
val padding = " " * (4 - prod.length)
padding + prod
} def makeRow(row : Int) = makeRowSeq(row).mkString def multiTable() = {
val tableSeq =
for(row <- 1 to 10) yield {
makeRow(row)
} tableSeq.mkString("\n")
} } object FileDemo2 extends App { implicit def add(x : Int) = 2 * 2
for(season <- List("fall", "winter", "spring")) {
println(season + ": ")
} var a = 'asdasda
val a1 = "asdasda"
println(a + " ,nameis:" + a.name + s", value is:$a1 -> $a") println(2) val fileDemo2 = new FileDemo2
val listDemo2 = fileDemo2.multiTable()
println(listDemo2)
}
好啦,今天的学习就到这了,目前来看scala很像java的简化版本,毕竟是后java出来的,有些简化很正常,目前还没发现scala的独到的地方
当然除了它写代码确实很简洁,java几百行,这个用scala可能就十几行,或者几十行,代码量至少缩小一倍吧
后续学习,我们接着来挖掘scala吧
最新文章
- JavaScript一词被《牛津大词典》收录了
- javaWeb——图片验证
- 手动添加jar包到maven
- 通通的最后一篇博客(附自制html5平面射击小游戏一枚)
- win7录屏工具
- codevs 1997 守卫者的挑战
- QT5静态编译教程,主要针对vs2012(渡世白玉)
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
- Yarn init 命令在 Git Bash 中打开时的错误
- Snort初探
- JS和Jquery操作label标签
- c# MD5及盐值加密
- Python递归_打印节点信息
- js中的Call()和apply()
- 如何创建和销毁对象(Effective Java 第二章)
- 用js来传参到父网页实现
- 《挑战程序设计竞赛》2.6 数学问题-辗转相除法 AOJ0005 POJ2429 1930(1)
- .NET开源工作流RoadFlow-表单设计-标签(label)
- erlang进程监控:link和monitor
- spring AOP详解〇