zoukankan      html  css  js  c++  java
  • scala的基本语法(一)

    一、基本语法

    静态语言与动态语言区别

    1. 静态语言(强类型语言):静态语言是在编译时变量的数据类型即可确定的语言。多数静态类型语言要求在使用变量之前必须声明数据类型。 强类型语言是一旦变量的类型被确定,就不能转化的语言。所以即便是类型推导出的变量类型,变量也无法改变类型。如Scala C/C++ java
    2. 动态语言(弱类型语言):动态语言是在运行时确定数据类型的语言。弱类型语言则反之,一个变量的类型是由其应用上下文确定的。PHP Python Javascript

    变量

    • val 底层等于被final 修饰,等于定义一个常量,值无法修改。线程安全的,因此效率高,推荐使用。

      修饰的对象引用不可改变,但对象的状态(值)却是可以改变的。(比如: 自定义对象、数组、集合等等) 。如val buffer = new StringBuffer(),buffer.append(“a”)这样的操作来修改buffer实例也是可行的。

    • var 修饰的变量值可改变, 类型定义后不可改变。

    • Scala 支持多个变量的声明:val xmax, ymax = 100

    • 变量声明时,需要初始值(显示初始化),类型可以省略(支持类型推导)。

    操作符

    • __ 等同Java的*
    • :__* 追加后, 表示参数被当做参数序列Seq处理

    数据类型详解

    在这里插入图片描述

    数据类型描述
    Byte8位有符号补码整数。数值区间为 -128 到 127 可通过 Byte.MaxValue查看最大值
    Short16位有符号补码整数。数值区间为 -32768 到 32767
    Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647
    Long64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
    Float32 位, IEEE 754 标准的单精度浮点数
    Double64 位 IEEE 754 标准的双精度浮点数
    Char16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
    String字符序列
    Booleantrue或false
    Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
    Nullnull 或空引用,是AnyRef下所有类型子类型。
    NothingNothing类型在Scala的类层级的最低端;是所有类型的子类。
    AnyAny是所有其他类的超类
    AnyRefAnyRef类是Scala里所有引用类(reference class)的基类

    字符串输出

    1 .printf():类型不安全

    C语言的修饰符大全

    %a,%A浮点数、十六进制数和p-计数法(C99)
    %c一个字符
    %d有符号十进制数
    %e,%E浮点数,e计数法
    %f浮点数,十进制计数法
    %g,%G根据数值不同自动选择%f或%e,%e格式在指数小于-4或者大于等于精度时使用
    %i有符号十进制整数(与%d相同)
    %o无符号八进制整数
    %p指针
    %s字符串
    %u无符号十进制数
    %x,%X使用十六进制数0f的无符号十六进制整数
    %%打印一个百分号

    2.字符串插值:

    Scala 提供了三种创新的字符串插值方法:s,f 和 raw.以及自定义插值器

    ① s 字符串插值器

    val name="James"
    println(s"Hello,$name")//Hello,James 此例中,$name嵌套在一个将被s字符串插值器处理的字符串中。插值器知道在这个字符串的这个地方应该插入这个name变量的值,以使输出字符串为Hello,James。使用s插值器,在这个字符串中可以使用任何在处理范围内的名字。
    println(s"1+1=${1+1}") //将会输出字符串1+1=2。任何表达式都可以嵌入到${}中。
    

    ②f 插值器 相当于printf 类型安全 若%后格式不对会报错

    val height=1.9d
    val name="James"
    println(f"$name%s is $height%2.2f meters tall")//James is 1.90 meters tall f 插值器是类型安全的。如果试图向只支持 int 的格式化串传入一个double 值,编译器则会报错。例如:
    val height:Double=1.9d
    scala>f"$height%4d"
    <console>:9: error: type mismatch;
     found : Double
     required: Int
    

    ③raw 插值器

    除了对字面值中的字符不做编码外,raw 插值器与 s 插值器在功能上是相同的

    scala>s"a\nb"
    res0:String=
    a
    b 这里,s 插值器用回车代替了\n。而raw插值器却不会如此处理。
    

    注意的地方:

    • 默认数据类型 Int Double
    • fload 小数只有7位,所以赋值的时候容易损失精度
    • double 与long的底层区别:浮点数精度不准确,重要数字宜采用java.math.BigDecimal,scalad
    • 由于赋值语句的值是unit类型的所以x=y=1是错误的,因为y=1的值是()
    • 字符串数字不能直接转成int
    val s1="12.5";println(s1.toint)//报错
    val mum:Float=1+1.0 //错误
    val mum:Float=1+1.0f //正确
    
    • ++虽然不能表示自增,但可以表示一个标识符,因为底层+被翻译成$Plus, 英文变量*被翻译成$times

      以"$“开头的标识符为保留的 Scala 编译器产生的标志符使用,应用程序应该避免使用”$"开始的标识符,以免造成冲突。

    • :-> 内部翻译成 $colon$minus​$greater

    • 在 Scala Byte字符变量使用单引号 来定义 ,’‘ 也可以跟SQL一样,加上反单引号使用内置变量名

    • 编译的文件在target文件夹里,但scaladoc -d 创建帮助文档时, 要选择main里面的源文件。一定要勤写文档注释。

    /**
        *example:求两个值的差30 40
        * @param n1 传入一个整数
        * @param n1 传入第二个整数
        * @return 返回差值
     */
    
    • Scala中isInstanceOf 和 asInstanceOf
      • p.isInstanceOf[XX] 判断 p 是否为 XX 对象的实例;p.asInstanceOf[XX] 把 p 转换成 XX 对象的实例
      • 如果没有用isInstanceOf 先判断对象是否为指定类的实例,就直接用 asInstanceOf 转换,则可能会抛出异常;
      • 如果对象是 null,则isInstanceOf 一定返回 false, asInstanceOf 一定返回 null;
  • 相关阅读:
    NSURLConnection实现文件上传和AFNetworking实现文件上传
    scrollToItemAtIndexPath: atScrollPosition: animated:
    UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning
    界面传值时数组赋值问题
    安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置
    iOS通知的整理笔记
    iOS简单实现毛玻璃效果
    iOS模态弹出半透明视图控制器
    友盟SDK实现分享
    iOS 本地存储四种方法
  • 原文地址:https://www.cnblogs.com/successok/p/14737331.html
Copyright © 2011-2022 走看看