scala学习01-scala基础语法

Scala基础

变量声明和使用

val a = 10
var b = 20

函数使用

def hello(a:Int,b:Int):Int{
    if(a > b)
        a
    else
        b
}

while循环

var i = 0;
while(i <10){
    print(i)
    i += 1
}

for循环

//函数式语言的主要特征就是:函数是头等结构
val a = List(1,2,3)
a.foreach(b => println(b))//括号中传入的是函数字面量

//for循环的例子
for(b <- a){
    println(b+1)
}

函数字面量的语法格式

//函数字面量语法
(a:Int,b:Int) => x + y

//如果函数字面量只有一行,并且只有一个参数,那么可以不写参数,直接写执行语句,例如:
args.foreach(println)

//复杂的写法:
val a = List(1,2,3)
a.foreach(b => {
    println(b);
    println(b+2);
})

数组(array)、列表(list)、元组(tuple)、集(set)、映射(map)

数组(Array)

val arr = new Array[String](3)
//这里的arr(0),实际上是对数组的apply()方法的调用,arr(0)等同于 arr.apply(0)
arr(0) = "Hello"
arr(1) = "World"
arr(2) = "heihei"
//使用foreach
arr.foreach(println)
//使用for-i,这里的to是Int的一个方法,带有一个参数,如果是这种情况,可以省略点和括号,直接调用方法,+,-这些都是方法名
for(i <- 0 to 2)
    println(arr(i))
//使用for-i,效果与上边等同
for(i <- 0 to arr.length-1)
    println(arr(i))

给数组赋值的方式

//更简洁的赋值方式
val a = Array("a","b","c")

列表(List),不可变,包含同类元素

//列表类似于java的String,一旦赋值就不可变了
val li = List(1,2,3)
//两个列表合并:
val a1 = List(1,2,3)
val a2 = List(4,5)
val a3 = a1 ::: a2

//将新元素加入到列表中,加入到列表的最前端,元素在前边
//以冒号结尾的方法,例如这里的::, 这个::其实是a1的方法
val a4 = 6 :: a1

//Nil是空列表的简写,所以可以用cons操作符把所有元素都串起来,并以Nil结尾来定义新的列表
val a5 = 1 :: 2 :: 3 :: Nil

//list 没有提供append方法,可以使用ListBuffer,其他方法看文档

元组(tuple),不可变,包含不同类元素

//定义:
val pair = (100,"Hello")
//获取元素,调用_N方法,N从1开始
val a = pair._1 //100
val b = pair._2 //"Hello"

集(Set) 和 映射(Map)

Set

//Set有可变与不可变之分,默认是不可变的
//声明(默认不可变的):
var aSet = Set("a","b")
aSet += "c"   //会返回一个新的Set,因为当前这个set是不可变的
println(aSet.contains("d"))

//声明可变的Set:
import scala.collection.mutable.Set
val bSet = Set("a","b")
bSet += "c"
println(bSet)

//指明具体Set类型:
import scala.collection.immutable.HashSet
val hashSet = HashSet("Tomatoes","Chilies")
println(hashSet + "Coriander")

Map

//同样有可变与不可变之分
//默认是不可变的:
var aMap = Map[Int,String](1->"a",2->"b")
aMap += (3->"c")//会产生一个新的Map并重新赋值给aMap
aMap += (4->"d")//同上

//可变Map:
import scala.collection.mutable.Map
val bMap = Map(1->"a",2->"b")
bMap += (3->"c")//添加元素
println(bMap(1))

函数式编程风格

  • 使用val
  • 避免函数的副作用,比如在函数中产生打印语句等
  • scala是指令式和函数式混合的编程语言,两种方式都可以使用,不过函数式要更简单。

读取文件内容

import scala.io.Source

def widthOfLength(s:String) = s.length.toString.length

if(args.length > 0){
    val lines = Source.fromFile(args(0)).getLines.toList

    val longestLine = lines.reduceLeft(
        (a,b) => if(a.length > b.length) a else b
    )

    val maxWidth = widthOfLength(longestLine)

    for(line <- lines){
        val numSpaces = maxWidth - widthOfLength(line)
        val padding = " " * numSpaces
        println(padding + line.length + " | " + line)
    }
}
else
    Console.err.println("Please enter filename")

原文地址:https://www.cnblogs.com/jiayupeng/p/9332469.html

时间: 2024-07-31 15:59:03

scala学习01-scala基础语法的相关文章

Scala学习:第一张基础 - 心得

这是一个神奇的语言. 安装环境就够折腾了,居然还挑eclipse,最新的4.4居然不支持,要用4.3.2 第一张都是些简单的概念介绍,但是通过第一张可以看出scala和其他语言的语法上存在较大的区别(当然根据我的知识范围也就是指的c#,Java) 关键点: 1.Scala中,我们不需要包装类型. 读到这里时,我对性能产生了担心,于是赶快查了下对Scala和Java的性能对比.有个比较好的文章.内容不多,字字珠玑. 不要使用for循环 不要使用scala.collection.mutable 不要

Scala学习01 环境安装

Scala是一门运行在jvm上的多范式语言,作为一个java程序员,使用Scala来写写程序,既不用担心会没有java强大的库支持,又能快速地写出简短强悍的代码,除此之外scala还为我们提供了强大的并发支持,Let's love it! 安装 下面来看看如何安装它(在此之前,确保已经安装好了jdk,我使用的jdk1.7). 我们可以通过Scala的官网(http://www.scala-lang.org/download/)来下载Scala.我使用的版本是2.11.1. 将安装包下载在本地之后

01-Python学习笔记-基础语法

Python标识符 -d           在解析时显示调试信息 -O           生成优化代码 ( .pyo 文件 ) -S           启动时不引入查找Python路径的位置 -v            输出Python版本号 -X           从 1.6版本之后基于内建的异常(仅仅用于字符串)已过时. -c cmd     执行 Python 脚本,并将运行结果作为 cmd 字符串. file           在给定的python文件执行python脚本. P

ios学习路线_OC基础语法

OC是面向对象的语言,同java,python等等一样. OC中的变量类命名同其他对象语言基本类似,写法遵循驼峰法则 一般命名用到的是下划线,字母,开头字符非数字,网上很多有说也可以$符号,其实命名中基本不会用到这个 OC里面的关键字也不多,如图: OC中分基本数据类型和指针类型(即指对象类型) 那么一些基本类型的范围值和写法,这里不一一说,网上太多了,随便百度下 下面废话也不多说,直接给个网上的ppt说明吧 其实写过面向对象语言的朋友,基本上这块so easy 这里可以下载oc的基础部分 io

PHP:学习笔记(2)——基础语法

PHP:学习笔记(2)--基础语法 向屏幕输出 说明 1.void echo ( string $arg1 [, string $... ] ) 2.int print ( string $arg ) 注意: 1.echo.print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表. 2.输出变量的时候需要使用双引号! 3.int printf ( string $format [, mixed $args [, mixed $... ]] ) 4.strin

Scala学习(一)--Scala基础学习

Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学到作为初学者如何浏览Scaladoc文档 1. 使用Scala解释器 2. 用var和val定义变量 3. 数值类型 4. 使用操作符和函数 5. 浏览Scaladoc Scala解释器 启动Scala解释器的步骤如下: 安装Scala 确保scala/bin目录位于系统PATH中 在你的操作系统中

Spark入门到精通--(第二节)Scala编程详解基础语法

Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional language的混合式语言. Scala可以和java程序无缝拼接,因为scala文件编译后也是成为.class文件,并且在JVM上运行. Spark是由Scala进行开发的. Scala安装? 这里就讲一下Scala在Centos上进行安装的过程,和安装JDK差不多. 官网下载Scala:http://www

Scala学习笔记--正则表达式基础知识、如何在scala内使用

正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www.jb51.net/tools/zhengze.html  版本:v2.33 (2013-1-10) 作者:deerchao 转载请注明来源 使用格式:  见java API  http://docs.oracle.com/javase/7/docs/api/ java : java.util.reg

Scala学习笔记:重要语法特性

1.变量声明 Scala 有两种变量, val 和 var  val的值声明后不可变,var可变 val msg: String = "Hello yet again, world!" 或者类型推断 val msg = "Hello, world!" 2.函数定义 如果函数仅由一个句子组成,你可以可选地不写大括号. def max2(x: Int, y: Int) = if (x > y) x else y 3.for循环 打印每一个命令行参数的方法是: ar

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h