ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【SCALA】1、我要开始学习scala啦

2019-06-09 18:44:50  阅读:290  来源: 互联网

标签:java String val SCALA scala 我要 File def


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

 

标签:java,String,val,SCALA,scala,我要,File,def
来源: https://www.cnblogs.com/cutter-point/p/10994311.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有