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


     因为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("
    ")
      }
    
    }
    
    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吧

  • 相关阅读:
    mybatis中大于等于小于等于的写法
    RandomAccess接口
    ArrayList源码解析
    使用Docker搭建MySQL主从复制(一主一从)
    狂神Docker视频学习笔记(基础篇)
    【JQ】jQuery实现将div中滚动条滚动到指定位置的方法
    JAVA线程池的基本使用
    史上最全的Java技术体系思维导图,没有之一!
    springboot整合kafka
    spring cloud alibaba 分布式事务解决方案之seata-1.3.0
  • 原文地址:https://www.cnblogs.com/cutter-point/p/10994311.html
Copyright © 2020-2023  润新知