Scala 學(xué)習(xí)筆記

變量

  • val : 不可變變量

  • var: 可變變量

  • lazy val: 使用時(shí)初始化變量

變量聲明

聲明類(lèi)
class Person(val name: String, var age: Int) 

分號(hào)

= , { . 表示下一行還有代碼

代碼塊

方法和變量可以定義為單行,也可以嵌套。

注釋

/*
    This is a multiline comment:
*/
// This is a single line comment

數(shù)據(jù)類(lèi)型

類(lèi)型層次結(jié)構(gòu)

  • scala 中所有的類(lèi)型都是對(duì)象。

  • Any,AnyVal和AnyRef類(lèi)型是Scala類(lèi)型層次結(jié)構(gòu)的根。

  • 擴(kuò)展AnyVal的類(lèi)型稱為值類(lèi)型。

類(lèi)型

  • 字符 “a”

  • 布爾 false, !false

  • 數(shù)字 Byte . Short . Int . Long . Float . Double. (可按順序自動(dòng)將數(shù)字從一種類(lèi)型轉(zhuǎn)換為另一種類(lèi)型)

  • 常量 Long, Int, Short, Char, Byte

  • 字符串插值s"The book title is{book title}"

  • Option Map.get返回一個(gè)Optio[T]

    • 如果為some,則Some.get取值
    • 如果為None, 則None.get 拋出異常
  • Range

    • min-value to max-value by step-value
    • min-value until max-value
  • 元組

    • 創(chuàng)建:
      • (item1,item2)
      • item1 -> item2
    • 訪問(wèn)元組的索引值
      • ._index后綴
  • Unit 類(lèi)似void

語(yǔ)句

  • 匹配 MATCH

    match {
             case 0 => println("Zero")
             case 1 => println("One")
             case _ => println("more than one")
    }
    
  • 循環(huán)遍歷 <-

    val books = List("Scala", "Groovy", "Java", "SQL", "CSS")
        for (book<-books)
           println(book)
    

類(lèi)

  • Case類(lèi):提供與普通類(lèi)相同的功能,但編譯器生成toString,hashCode和equals方法,您可以覆蓋。

  • 方法聲明:def

  • 值類(lèi):AnyVal

    class SomeClass(val i: Int) extends AnyVal {
        def twice() = i*2
    }
    
  • 對(duì)象

    • 單例對(duì)象:只能有一個(gè)實(shí)例的類(lèi)

      object Car {
         def drive {
            println("drive car")
         }
      }
      Car.drive
      
  • 接口 Traits

    • 子接口 extend
  • 繼承

    • 單繼承,子類(lèi)只可以有一個(gè)父類(lèi)
    • 根:Any
    • 覆蓋 override
  • 構(gòu)造函數(shù)

    • 參數(shù)聲明為val,只生成一個(gè)getter方法

    • 參數(shù)聲明為val,生成訪問(wèn)器和mutator方法

    • 可以將private關(guān)鍵字添加到valvar字段,以防止getter和setter方法生成。

    • 輔助構(gòu)造函數(shù)以提供創(chuàng)建對(duì)象的不同方法。

      輔助構(gòu)造函數(shù)通過(guò)創(chuàng)建名為this的方法來(lái)定義。

      我們可以定義多個(gè)輔助構(gòu)造函數(shù),但它們必須有不同的簽名。

      每個(gè)輔助構(gòu)造函數(shù)必須以對(duì)先前定義的構(gòu)造函數(shù)的調(diào)用開(kāi)始

      class Book (var title :String, var ISBN: Int) {
          def this(title: String) {
              this(title, 2222)
          }
          def this() {
              this("CSS")
              this.ISBN = 1111
          }
          override def toString = s"$title ISBN- $ISBN"
      }
      val book1 = new Book
      val book2 = new Book("Clojure")
      val book3 = new Book("Scala", 3333)
      
  • 伴生對(duì)象

    • 概念:對(duì)象與一個(gè)類(lèi)共享一個(gè)名稱時(shí),它被稱為伴生對(duì)象,并且該類(lèi)被稱為伴生類(lèi)。

    伴生對(duì)象是與另一個(gè)類(lèi)或特征共享相同名稱和源文件的對(duì)象。

    • 優(yōu)點(diǎn):允許在類(lèi)上創(chuàng)建靜態(tài)成員

    • 注:與伴生類(lèi)不共享相同名稱的單例對(duì)象稱為獨(dú)立對(duì)象。

  • 閉包

    • 概念:一個(gè)函數(shù),它的返回值取決于在該函數(shù)之外聲明的一個(gè)或多個(gè)變量的值

    • 函數(shù)鏈:Currying轉(zhuǎn)換具有多個(gè)參數(shù)的函數(shù),創(chuàng)建一個(gè)函數(shù)鏈,每個(gè)函數(shù)都需要一個(gè)參數(shù)

      def add(x: Int)(y: Int) = x + y
      def add(x: Int) = (y: Int) => x + y
      
  • 導(dǎo)入

    • 使用下劃線_作為通配符導(dǎo)入所有類(lèi)型

      import java.awt._ 
      
    • 程序包名稱是代碼所有者的反向域名

      • 源文件中的第一個(gè)非注釋行:

        package com.java2s.stuf
        
  • 集合

    • 數(shù)組 Array

    • 列表 List

      • 空列表

        val empty = Nil 
        
      • 創(chuàng)建

        val books: List[String] = List("Scala", "Groovy", "Java") 
        
        val books = "Scala" :: ("Groovy" :: ("Java" :: Nil)) 
        
      • 列表上的操作可以用head和tail方法表示,其中head返回列表的第一個(gè)元素,tail返回一個(gè)由除第一個(gè)元素之外的所有元素組成的列表。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • scala學(xué)習(xí)筆記 第2章 變量和數(shù)據(jù)類(lèi)型 基本數(shù)據(jù) scala的核心數(shù)據(jù)為四種 :字面量、值、變量、類(lèi)型 值使...
    485b1aca799e閱讀 2,246評(píng)論 0 1
  • scala文檔 包含內(nèi)容 1基礎(chǔ) 2控制結(jié)構(gòu)和函數(shù) 3數(shù)組相關(guān)操作 4映射和元組 5類(lèi) 6對(duì)象 7.包和引入(x)...
    zlcook閱讀 1,049評(píng)論 0 3
  • 22.13.main方法 Scala的main方法(類(lèi)似java的static方法)必須定義在一個(gè)object內(nèi):...
    時(shí)待吾閱讀 870評(píng)論 0 0
  • 大數(shù)據(jù)學(xué)院_騰訊大數(shù)據(jù)http://data.qq.com/academySpark是一個(gè)通用的并行計(jì)算框架,立足...
    葡萄喃喃囈語(yǔ)閱讀 683評(píng)論 0 1
  • 關(guān)于新型冠狀病毒疫情,我們應(yīng)該更全面的去關(guān)注,不僅僅去看疫情的發(fā)展情況,還要去考慮它對(duì)于社會(huì)和經(jīng)濟(jì)發(fā)展的影響。 首...
    水沉檀香閱讀 759評(píng)論 0 0

友情鏈接更多精彩內(nèi)容