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

【SCALA】1、我要开始学习scala啦的更多相关文章

  1. 学习Scala第一篇-从hello World开始

    最近开始系统性的学习scala.其实之前使用过scala的,比如我在用Gatling这款性能测试工具的时候就接触到了scala了.Gatling本身就是用Scala写的,而且Gatling的性能测试配 ...

  2. 怎样学习Scala泛函编程

    确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...

  3. 学习Scala: 初学者应该了解的知识

    Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...

  4. 如何快速学习Scala

    大数据学习过程中,会学习非常多的技术,但SCALA无疑是必不可少,那我们在大数据技术的学习过程中,如何快速的认识scala,并且学习它,感谢科多大数据公司的余老师提供的详细素材,本人整理成章,希望对你 ...

  5. scala编程第16章学习笔记(2)

    转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ...

  6. scala编程第16章学习笔记(1)

    List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得 ...

  7. Scala基础语言api入门学习

    Scala的变量定义 变量定义 声明一个val变量类似与java的 public static final String 一致,一旦初始化不能改变,和java的泛型类似,Scala会帮我们进行类型推断 ...

  8. scala编程第17章学习笔记(4)——元组

    元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...

  9. scala编程第17章学习笔记(3)

    可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...

  10. scala编程第17章学习笔记(2)——集和映射

    默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...

随机推荐

  1. 【JDBC】仅输入表名和要插入的记录数,自动检测表的字段和类型,然后插入数据的全自动程序(Oracle版)

    之前写的批量插值程序只是五六半自动版本,因为表的字段还需要手工填写,这回只要指定表名和要插多少数据就行了,类似于全自动突击步枪,扣动扳机就把字段打完为止. 全自动程序如下,诸位拿下去后可以修改成自己想 ...

  2. 在input内添加小图标或文字(元/月)等

    文字: <td class="formValue"> <div class="input-group"> <input id=&q ...

  3. Tosca : 把 inner text 放到变量里,定义变量,使用变量

    XB的是分开取 注意颜色要变成蓝色的,才可用 上面是定义 下面是使用 键盘输入变量

  4. 约翰·麦斯威尔 | John C. Maxwell | A leader is one who knows the way, goes the way, and shows the way.

    约翰·麦斯威尔_百度百科https://baike.baidu.com/item/%E7%BA%A6%E7%BF%B0%C2%B7%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%9 ...

  5. markdown如何在表格内换行?

    答:使用<br>即可在表格内换行

  6. scipy.fftpack fft

    from scipy.fftpack import fft SciPy提供fftpack模块,可让用户计算快速傅立叶变换 例子: >>> a = np.arange(1,5) > ...

  7. openresty开发系列28--openresty中操作mysql

    openresty开发系列28--openresty中操作mysql Mysql客户端   应用中最常使用的就是数据库了,尤其mysql数据库,那openresty lua如何操作mysql呢?   ...

  8. vector 移除元素

    vector中移除“与某值相等”的第一个元素. std::vector<Elem> coll; ... //remove first element with value val std: ...

  9. Linux记录-limits.conf 配置

    limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会 ...

  10. ISCSI多路径配置(二)

    搭建iscsi存储系统(一) (1).配置ISCSI多路径实现磁盘挂载高可用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出现故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 ...