Scala01

1.什么是Scala

Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。

优点:
1.优雅,直接影响用户的体验
2.速度快,Scala语言表达能力强,一行代码抵得上java多行;Scala是静态编译的。
3.能融合到hadoop生态圈;

2.在IDEA下创建Scala项目

下载并安装Scala在Windows
1.下载Scala2.12.8.zip
2.解压到任意目录
3.添加环境变量
4.测试(出现如下结果,成功)
在这里插入图片描述

在创建项目前需要在IDEA中安装Scala插件
1.使用本地Scala
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导入成功!

2.使用指定版本的Scala
在这里插入图片描述
创建一个Scala项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击运行测试,此时,第一个Scala项目运行成功。

传递参数
在这里插入图片描述
在这里插入图片描述
运行成功!
在这里插入图片描述

3.使用Scala做WordCount

在这里插入图片描述

4.数据类型

Any(类似于Java中的Object)
Anyval
基本类型:Byte,Int,Char,Double,Flat,Int,Long,Short
布尔类型:Boolean
Unit:表示无值,和其他语言中void等同,作为不返回任何结果的方法的结果类型
AnyRef
Scalaclasses
javaclasses

变量的定义
var和val用于定义变量(编译器自动推测数据的类型)
var | val 变量名: 数据类型 = 数值
var | val 变量名 = 数值

var name = “zhangsan” //var修饰的变量值可以改变
var name2: String = “xiaoqiang”

val age = 18 //val修饰的变量值不能改变,类似于Java中被final修饰的变量
val age2: Int = 19

var a: Unit //错误做法
在这里插入图片描述
Unit数据类型相当于Java中的void,但是在Scala中的表现形式为()
在代码块中的最后一行代码,为代码块的返回值。
在这里插入图片描述
在这里插入图片描述

val r = if(i < 8) i //else没有写,编译器会自动推测出你什么都没有返回就是Unit
val r1 = if(i<8) i else "haah"

循环语句/yield关键字
在scala中有for循环和while循环,使用for循环比较多
使用for循环取出数组中的元素
在这里插入图片描述
使用角标的方法取出数组中的元素
在这里插入图片描述
在这里插入图片描述
0 to 5 //左闭右闭区间
0 until 5 //左闭右开区间

将数组中的偶数输出
在这里插入图片描述
双层for循环
在这里插入图片描述
yield关键字:会生成一个新的数组并且返回。
在这里插入图片描述
操作符重载成方法
在这里插入图片描述

5.方法定义

def 方法名(参数1: 类型1, 参数2: 类型2):类型3 = {方法体}
在这里插入图片描述
定义一个不传递任何参数的方法
在这里插入图片描述
在这里插入图片描述
在定义函数的时候没有带()那么在调用方法的时候一定不能带有()。

6.方法可转换成函数

经方法转换成函数:方法名 _
在这里插入图片描述
定义匿名函数
在这里插入图片描述

7.函数的定义

第一种函数定义方式:
在这里插入图片描述
第二种函数定义方式:
在这里插入图片描述
在这里插入图片描述
函数可以作为参数传递到另一个方法里面。
传值调用与传名调用案例分析

  var money = 100
  def huaQian():Unit = {
    money = money - 5;
  }
  def shuQian() = {
    huaQian()
    money
  }
  //x: => Int 表示是一个方法的签名=>没有参数,返回参数,返回值为Int类型的函数
  def printByName(x: => Int): Unit ={
    for(b<- 0 to 3){
      println(s"每次都算算还剩:${x}元")
    }
  }
  def printByValue(x: Int) = {
    for(a <- 0 until 3){
      println(s"测试:${x}元")
    }
  }
  def main(args: Array[String]): Unit = {
    //传名调用
    printByName(shuQian())
    //传值调用printByValue参数为一个具体的数值
    //printByValue(shuQian())
  }
  //add方法拥有2个Int类型的参数,返回值为2个Int的和
  def add(a:Int, b:Int) = {
    a + b
  }
  //add2方法拥有3个参数,第一个参数是一个函数,第二个,第三个为Int类型的参数
  //第一个参数:是拥有2个Int类型的参数,返回值为Int类型的函数
  def add2(f:(Int, Int) => Int, a:Int, b:Int) = {
    f(a, b)
  }
  def add3(a:Int => Int, b:Int) = {
    a(b) + b
  }
  def main(args: Array[String]): Unit = {
    val r3 = add3((a: Int) => a - 1,5)
    println(r3)
    val r1 = add(1, 2+3)
    println(r1)
    val r2 = add2(add, 7, 9)
    println(r2)
  }

Java实现对操作符的封装

public interface IOperate {
    public Object caoZuo(Integer ele);
}
public class MyList {

    private ArrayList<Integer> list;
    private ArrayList<Integer> resultList;


    public MyList(ArrayList<Integer> list){
        this.list = list;
    }

    public ArrayList<Integer> map(IOperate op){

        resultList = new ArrayList<>();

        for(Integer l : list){
            resultList.add((Integer) op.caoZuo(l));
        }

        return resultList;
    }

}
    public static void main(String[] args){
        
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        
        MyList myList = new MyList(list);
        
        ArrayList<Integer> rlist = myList.map(new IOperate(){

            @Override
            public Object caoZuo(Integer ele) {
                return ele * 10;
            }
        });

        rlist.forEach(r -> System.out.println(r));
        for(Integer r : rlist){
            System.out.println("r = " + r);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值