因为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吧

最新文章

  1. JavaScript一词被《牛津大词典》收录了
  2. javaWeb——图片验证
  3. 手动添加jar包到maven
  4. 通通的最后一篇博客(附自制html5平面射击小游戏一枚)
  5. win7录屏工具
  6. codevs 1997 守卫者的挑战
  7. QT5静态编译教程,主要针对vs2012(渡世白玉)
  8. MFC之窗体改动工具栏编程状态栏编程程序启动画面
  9. Yarn init 命令在 Git Bash 中打开时的错误
  10. Snort初探
  11. JS和Jquery操作label标签
  12. c# MD5及盐值加密
  13. Python递归_打印节点信息
  14. js中的Call()和apply()
  15. 如何创建和销毁对象(Effective Java 第二章)
  16. 用js来传参到父网页实现
  17. 《挑战程序设计竞赛》2.6 数学问题-辗转相除法 AOJ0005 POJ2429 1930(1)
  18. .NET开源工作流RoadFlow-表单设计-标签(label)
  19. erlang进程监控:link和monitor
  20. spring AOP详解〇

热门文章

  1. Authentication failure. Retrying - 彻底解决vagrant up时警告
  2. 【转】Android检查手机是否被root
  3. JVM内存空间划分与作用
  4. python命令行传入参数
  5. TCP为什么会出现 RST
  6. Maven Multi-Module Example
  7. flutter 主页面底部导航栏实现以及主题风格设置
  8. Python3基础 str : 对字符串进行切片
  9. 算法习题---5.8Unix ls命令(Uva400)
  10. Qt编写气体安全管理系统19-端口管理