Scala入门,idea关联Scala

Scala

介绍

Scala是一种多规范的编程语言,它结合了面向对象编程(OOP)和函数式编程(FP)的特征,Scala的名字源于"Scalable language",意为"可伸缩语言"。2003年开发的,并在JVM(Java虚拟机)上运行的,Scala被设计用于编程简介高效的代码的同时提供强大的表达能力和灵活性。

特点

  • 面向对象和函数式编程支持:
    • Scala支持面向对象的编程范式,同时也强调函数式编程,允许开发者以更函数式的方式思考和编写代码,从而更好地处理并发和异步编程等问题。
  • 静态类型:
    • Scala是一门静态类型语言,可以在编译时捕获一些错误,提高代码的稳定性和可维护性。
  • 表达力强:
    • Scala提供了丰富的语法特性,可以用更少的代码表达更多的概念,从而增强代码的可读性和可理解性。
  • 互操作性:
    • Scala可以与Java无缝集成,可以直接调用Java类库和组件,这对于现有的Java开发者来说是一个优势,也使得在已有的Java项目中引入Scala逐步过渡变得容易。
  • 并发支持:
    • Scala通过其函数式编程特性,提供了更好的并发编程支持,例如使用不可变数据结构和并行集合来简化多线程编程。

为什么学习

  • 丰富的编程范式:
    • 学习Scala可以让你同时了解面向对象和函数式编程的特性,从而能够更灵活地选择适合不同情境的编程方式。
  • 并发和多线程编程:
    • Scala在并发编程方面提供了强大的支持,这在处理现代应用中的并发性和异步编程方面非常有用。
  • 表达能力:
    • Scala的语法特性允许你以更简洁的代码表达复杂的概念,提高代码的可读性和可维护性。
  • JVM平台:
    • Scala运行在Java虚拟机上,因此可以与Java代码互操作,适合在现有的Java项目中引入。Scala可以直接调用Java中的方法,访问Java中的字段,继承java类,实现Java接口。
  • 函数式思维:
    • 学习Scala可以培养函数式编程思维,这对于提高编程的抽象能力、模块化能力和问题解决能力都很有帮助。

总之,学习Scala可以让你拥有多规范编程的能力,从而更好的应对复杂的软件开发任务,尤其是在并发编程和大规模的应用开发方面。

数据类型

类型 数据类型
整数类型 byte,short,int,long
浮点数类型 float,double
字符类型 char
布尔类型 boolean
字符串类型 String
数组类型 Array
列表类型 list
元组类型 tuple
集合类型 set
映射类型 map

运算符

类型 运算符
算术运算符 +,-,*,/,%
比较运算符 ==,!= , > , < , >= , <=
逻辑运算符 && , || , !
赋值运算符 = , += , -= , *= , /=
位运算符 & , | , ^ , ~ , << , >>
条件运算符 if-else , match-case
循环运算符 for , while , do-while

案例

shell 复制代码
scala> "hello scala"
res0: String = hello scala

scala> 1+1
res1: Int = 2

定义数组

创建数据的方式

shell 复制代码
var 数据名称 : Array[数据类型] = new Array[数据类型](数组长度)
var 数组名称 : Array[数据类型] = Array(元素1,元素2......) 

例如

shell 复制代码
# 第一种创建方式
scala> var arr: Array[String] = new Array[String](3)
arr: Array[String] = Array(null, null, null)
# 数组的长度
scala> arr.length
res0: Int = 3
# 对索引1的元素赋值
scala> arr(1)="zhangsan"
# 查看索引1的元素
scala> arr(1)
res2: String = zhangsan
# 查看索引0的元素
scala> arr(0)
res3: String = null
# 查看数组
scala> arr
res4: Array[String] = Array(null, zhangsan, null)


# 第二种创建方式
scala> var arr1 : Array[Int] = Array(1,2,3,4)
arr1: Array[Int] = Array(1, 2, 3, 4)
# 数组长度
scala> arr1.length
res6: Int = 4
# 索引处的元素值
scala> arr1(2)
res7: Int = 3

关键字

  • Unit :表示无值,等同于Java中的void

  • abstract:抽象类、抽象方法

  • case:模式匹配中的一个分支

  • class:类定义

  • def:方法/函数定义

  • do:do-while循环的开始

  • else:if条件的分支

  • extends:类的继承

  • false:布尔值false

  • final:不可继承、重写或修改的修饰符

  • for:for循环

  • if:条件语句

  • implicit:隐式转换

  • import:导入其他包或类

  • match:模式匹配

  • new:创建对象

  • null:空值

  • object:单例对象或伴生对象

  • override:重写父类或特质中的方法

  • package:包定义

  • private:私有访问权限

  • protected:受保护的访问权限

  • return:返回值

  • sealed:密封类

  • super:父类引用

  • this:当前类或对象的引用

  • throw:抛出异常

  • trait:特质定义

  • true:布尔值true

  • try:异常处理

  • type:类型别名

  • val:不可变变量声明

  • var:可变变量声明

  • while:while循环

  • with:混入特质

  • yield:生成器

idea关联Scala

创建maven项目

配置maven仓库

添加Scala插件

添加相关依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sin</groupId>
    <artifactId>Demo-scala</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-graphx_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

    </dependencies>

</project>

添加scala的SDK

需要将其提前安装好:安装Scala

创建Scala文件

案例

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, World!")
  }

}

阶乘

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object Factorial {
  def factorial(n: Int): Int = {
    if (n == 0) 1
    else n * factorial(n - 1)
  }

  def main(args: Array[String]): Unit = {
    val result = factorial(5)
    println(result) // 输出120
  }

}

素数

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object IsPrime {
  def isPrime(num: Int): Boolean = {
    if (num <= 1) false
    else if (num == 2) true
    else !(2 to (Math.sqrt(num).toInt + 1)).exists(x => num % x == 0)
  }

  def main(args: Array[String]): Unit = {
    println(isPrime(7)) // 输出true
    println(isPrime(15)) // 输出false
  }


}

列表中最大的数

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object ListMax {
  def main(args: Array[String]): Unit = {
    val numbers = List(2, 8, 1, 6, 10, 4)
    val maxNumber = numbers.max
    println(maxNumber) // 输出10
  }
}

计算列表中所有的和

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object HelloWorld {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3, 4, 5)
    val sum = numbers.sum

    println(sum) // 输出15
  }
 
}

遍历列表

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object ForEachList {
  def main(args: Array[String]): Unit = {
    val fruits = List("apple", "banana", "orange")

    fruits.foreach(println)
    // 输出:
    // apple
    // banana
    // orange
  }
}

判断天气

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object IfWeather {
  def main(args: Array[String]): Unit = {
    println(weatherType("sunny")) // 输出It's a sunny day!
    println(weatherType("snowy")) // 输出Unknown weather type.
  }
  def weatherType(weather: String): String = weather match {
    case "sunny" => "It's a sunny day!"
    case "cloudy" => "It's a cloudy day."
    case "rainy" => "Don't forget your umbrella!"
    case _ => "Unknown weather type."
  }
}

九九乘法表

scala 复制代码
package com.sin

/**
 * @CreateName SIN
 * @CreateDate 2023/08/28 16:36
 * @description
 */
object Multiplication {
  def main(args: Array[String]): Unit = {
    for (i <- 1 to 9; j <- 1 to i) {
      print(s"$j * $i = ${i * j}\t")
      if (i == j) println()
    }
  }
}
相关推荐
乌旭1 分钟前
量子计算入门:Qiskit实战量子门电路设计
人工智能·pytorch·python·深度学习·transformer·量子计算
Niuguangshuo22 分钟前
Python设计模式:责任链模式
开发语言·python·责任链模式
莫魂魂30 分钟前
002_IDEA企业开发工具
java·ide·intellij-idea
小杨40443 分钟前
python入门系列十五(asyncio)
人工智能·python·pycharm
爱学习的capoo1 小时前
对应列表数据的分割和分组
python·pandas
点燃大海1 小时前
MySQL表结构导出(Excel)
java·数据库·python·mysql·spring
Hole_up1 小时前
蓝桥杯真题-分糖果-题解
python·算法·职场和发展·蓝桥杯
databook1 小时前
『Plotly实战指南』--散点图绘制进阶篇
python·数据分析·数据可视化
一切皆有迹可循1 小时前
IntelliJ IDEA中Spring Boot 3.4.x+集成Redis 7.x:最新配置与实战指南
spring boot·redis·intellij-idea
Tttian6222 小时前
Python办公自动化(4)对PPT&邮箱的操作
开发语言·python