Scala 入门详解

  基本语法

Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的

Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。类,对象,方法,实例变量的概念:

对象 - 对象有属性和行为。例如:一只狗的状属性有:颜色,名字,行为有:叫、跑、吃等。对象是一个类的实例。

类 - 类是对象的抽象,而对象是类的具体实例。

方法 - 方法描述基本的行为,一个类可以包含多个方法。

字段 - 每个对象都有它唯一的实例变量集合,即字段。对象的属性通过给字段赋值来创建。

区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义

类名 - 对于所有的类名的第一个字母要大写。采用驼峰命名。

方法名 - 所有的方法名称的第一个字母用小写,采用驼峰命名。

程序文件名 - 程序文件的名称应该与对象名称完全匹配。

def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。

  标识符

Scala 可以使用两种形式的标志符,字符数字和符号

在" "之间使用任何有效的 Scala 标志符,Scala 将它们解释为一个 Scala 标志符,当使用scala关键字命名时必须加"区别

  Scala 注释

Scala 类似 Java 支持单行和多行注释。多行注释可以嵌套,但必须正确嵌套,一个注释开始符号对应一个结束符号。

  换行符

Scala是面向行的语言,语句可以用分号(;)结束或换行符。Scala 程序里,语句末尾的分号通常是可选的。

  Scala 包

定义包

Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式:

第一种方法和 Java 一样,在文件的头定义包名,这种方法就后续所有代码都放在该包中。 比如:

package com.myDemo

class HelloWorld { }

第二种方法有些类似 C#,可以在一个文件中定义多个包,如:

package com.myDemo {
class HelloWorld
  }

引用包

Scala 使用 import 关键字引用包:

import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。

import java.awt._  // 引入包内所有成员

import java.awt.{Color, Font}   //引入部分成员,Color,Font成员

import java.util.{HashMap => JavaHashMap}   // 重命名成员

import java.util.{HashMap => _, _} //隐藏成员:引入了util包的所有成员,但是HashMap被隐藏了

  变量

在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量,val相当于Java中的final变量,一旦被赋值就不能修改。

constant为定义常量的关键字

  函数

Scala 函数声明格式如下:

def functionName ([参数列表]) : [return type]={   }

如果不写等于号和方法主体,那么方法会被隐式声明为"抽象(abstract)",包含它的类也是一个抽象类型.

  对象

普通对象使用class定义,默认public,Unit(void)即没有返回值

Scala没有静态成员,Singleton单例对象使用object定义。

  占位符语法

scala的函数中用“_”作为占位符,这个占位符可以用于代替传入的参数

  数组

val arrarys=new Array[String](3); //arrarys为val,但内部的数组值是可变的

arrays(0)="num1";   //数组赋值取值用()

  Scala操作符等价于方法,所以任意方法都可以以操作符的形式使用

1 + 2     //(1).+(2) 在只有一个参数的情况下,可以省略 . 和 ()

scala中无++,-- 只能写成i = i+1,i += 1

  String Interpolation String (插值器)

例如:

val name = "James"

println(s"Hello, $name")    // Hello, James

  右操作符 "::"  以"::"结尾的方法是右结合的

:: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。

用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(x::list等价于list.::(x))

:+和+: 两者的区别在于:+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match,而+:则不行。 +:和:+ 只要记住冒号永远靠近集合类型就可以了。

++ 该方法用于连接两个集合,list1++list2

::: 该方法只能用于连接两个List类型的集合

  scala三引号的作用

对于大量转义字符及换行的字符串可以使用三个双引号,三个双引号对里面的换行、转义符等原样输出,左对齐可以使用|进行对其。

例如:  val hello = """|Welcome to

|Scala, "Hello World" """ ;

  scala可以通过“*”来定义函数的可变参数

数组当做变量直接传入时,使用“:_*”就是告诉解释器,将数组的中的元素当做一个个参数传入

  函数调用

如果调用函数时,不需要传递参数,则scala允许调用函数时省略括号,如:

for(arg: args) { println(arg); }

args.foreach((arg:String) =>println(arg));

args.foreach((arg) =>println(arg)); //省略类型

args.foreach(println); //省略参数列表

  apply用法

类中定义了apply的方法后,调用这个方法不需要显示的写apply。直接写"实例名(参数列表)"的形式就好。

通常使用这种方式来构造类的对象。

参考资料:http://www.runoob.com/scala/scala-tutorial.html

Scala 入门详解的更多相关文章

  1. Scala入门详解

    object作为Scala中的一个关键字,相当于Java中的public static class这样的一个修饰符,也就说object中的成员都是静态的! 所以我们在这个例子中的main方法是静态的, ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. SQL注入攻防入门详解

    =============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...

  4. SQL注入攻防入门详解(2)

    SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...

  5. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  6. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  7. [转]SQL注入攻防入门详解

    原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...

  8. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  9. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

随机推荐

  1. Gravitee.io 架构

    Gravitee.io 官方文档提供了几张架构图,通过图我们可以有一个整体的认识. 全局架构 平台架构 参考资料 https://docs.gravitee.io/apim_overview_arch ...

  2. lapis 项目添加prometheus 监控集成grafana

    操作很简单,主要是进行界面的配置以及prometheus 服务的配置, 可以和https://www.cnblogs.com/rongfengliang/p/10074044.html &&a ...

  3. YII2常用知识点总结

    YII2常用知识点总结 (一)总结性语句 (1)经常看看yii源码比如vendor\yiisoft\yii2\web这个目录(很重要)下的文件中的方法(这些文件中的公共方法,大致看了下基本上都可以通过 ...

  4. 机器学习 - 开发环境安装pycharm + pyspark + spark集成篇

    AS WE ALL KNOW,学机器学习的一般都是从python+sklearn开始学,适用于数据量不大的场景(这里就别计较“不大”具体指标是啥了,哈哈) 数据量大了,就需要用到其他技术了,如:spa ...

  5. 本地开发不用改hosts 也可以绑定域名开发

    以往我们在开发 web 应用时,为了模拟生产环境都会修改系统中的hosts 文件,加入一个域名指向 127.0.0.1,绑定到开发目录,如下: 但是在 Chrome 中有一个域名是可以不用修改 hos ...

  6. python从文本中提取某酒店机顶盒号和智能卡号

    1.某项目中经常遇到需要关闭一些机顶盒消费权限.但是给过来的不是纯字符串,需要自己提取. 有400多个机顶盒和智能卡.nodepad++的列块模式也可以提取,但是还是稍微麻烦,因为列不对等 先复制到文 ...

  7. openstack--2--控制节点安装mysql和rabbitmq

    生产中可以把mysql数据库单独安装到一台机器上,这里因为实验机器有限,就把mysql安装到了控制节点 其实openstack每个组件都可以安装到单独的机器上. RabbitMQ介绍 RabbitMQ ...

  8. 深入理解 Python yield

    https://blog.csdn.net/lftaoyuan/article/details/78915518 python2和python3是不兼容的,通篇环境都是python3.6 简单的yie ...

  9. Day 04 if判断,while循环,for循环

    if判断语法一:if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例:sex='female'age=18is_beautiful=True if sex == 'female' ...

  10. windows 日志,IIS应用程序池回收日志

    应用程序池回收日志筛选事件ID:5074 进程被关闭:5186