Scala 学习记录(一)
1. 相对于java,scala的值修饰用val,变量修饰用var.值相当于java的final 修饰了。
package demo
object ScalaBase extends App {
println(1)
println(1 + 1)
println("Hello!")
println("Hello," + " World!")
/**
* val 是值得修饰符,相当于java的final int x;
* scala 可以不指名类型
*/
val x = 1 + 1
println(x)
///x =2 //不编译的
//指明类型可以如下写
val x1 : Int = 1 + 1
println(x1)
/**
* var 是变量修饰符,相当于java int x2,不加final修饰
*/
var x2 = 1 + 1
x2 = 3
println(x2 * x2)
/**
* scala 是个万能表达式语言,比如可以通过{}组合表达式
*/
println({
val x = 1 + 1
x + 1
})
println({
val x = "test " + "scala "
x + "demo!"
})
/**
* scala相对于java 方法定义,分为函数和方法
* 函数是带参数的表达式,也就是相对于java8的匿名方法()->{}
* (int x, int y) ->{}
* 左边是参数,右边是表达式
*/
(x: Int) => x + 1
val addOne = (x: Int) => x + 1
println(addOne(1))
val add = (x: Int,y: Int) => x + y
println(add(1,2))
val getTheAnswer = () => 42
println(getTheAnswer())
/**
* def 是方法关键字
* def 后面是方法名
* 与java不同的是,scala的返回类型是写在: Int
* =后面就是方法体
* 类似于java的 public int addMethod(int x, int y) {return x + y}
* 注意:scala虽然有return保留字,一般都不用,scala用最后一行进行返回
* @param x
* @param y
* @return
*/
def addMethod (x: Int, y: Int): Int = x + y
println(addMethod(1, 2))
/**
* 方法可以有多个参数
* 相对于java,scala有多个参数类别,不用定义在同一()里面,比较明显表明表达式结构
*/
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = {
(x + y) * multiplier
}
/**
* 当然scala也可以没有参数
*/
def name: String = System.getProperty("name")
println("Hello, " + name + "!")
/**
* scala 可以用{}使用多行表达式
*/
def getSquareString(input: Double): String = {
val square = input * input
square.toString
}
println(getSquareString(2.22))
/**
* 类跟Java一样都是用class 关键字
* 不同的是scala的参数可以定义在()里面
* 类似于Java的构造函数
* 相对于java用void表示没有返回值,scala用 Unit
*/
class Greeter(prefix: String, suffix: String) {
def greet(name: String): Unit = println(prefix + name + suffix)
}
/**
* scala 同样使用new 作为创建实例的关键字
*/
val greeter = new Greeter("Hello,","!")
greeter.greet("Scala developer")
/**
* case class 是一个非常特殊的类,它可以用于模式匹配
* case class 可以不用new关键字
* 它是一个public类
* 它自动生成hashCode 、equals
*/
case class Point(x: Int,y: Int)
val point = Point(1, 2)
val anotherPoint = Point(1, 2)
val yetAnotherPoint = Point(2, 2)
if (point == anotherPoint) {
println(point + " and " + anotherPoint + " are the same.")
} else {
println(point + " and " + anotherPoint + " are different.")
}
// Point(1,2) and Point(1,2) are the same.
if (point == yetAnotherPoint) {
println(point + " and " + yetAnotherPoint + " are the same.")
} else {
println(point + " and " + yetAnotherPoint + " are different.")
}
/**
* Objects 是一个单例,不能用new
* 就像Java定义单例模式一样,它只有一个
*/
object IdFactory {
private var counter = 0
def create(): Int = {
counter += 1
counter
}
}
val newId: Int = IdFactory.create()
println(newId)
val newerId: Int = IdFactory.create()
println(newerId)
/**
* Traits 类似于Java的Interface,只不过Traits可以部分实现
* Java 只能通过default 进行部分实现,实现包内访问
* trait 只用extends修饰,到不用实现
*/
trait GreeterTrait {
def greet(name: String): Unit
def greetDefault(name: String): Unit =
println("Hello, " + name + "!")
}
class DefaultGreeterTrait extends GreeterTrait {
override def greet(name: String): Unit = {
println()
}
}
class CustomizableGreeter(prefix: String, postfix: String) extends GreeterTrait {
override def greet(name: String): Unit = {
println(prefix + name + postfix)
}
}
val greeterTrait = new DefaultGreeterTrait()
greeterTrait.greet("Scala developer")
val customizableGreeter = new CustomizableGreeter("How are you","?")
customizableGreeter.greet("Scala developer")
/**
* scala 是运行与jvm,因此也需要一个主要方法main,main也是一个字符串数组
*/
}
object ScalaMain {
def main(args: Array[String]): Unit =
println("Hello, Scala developer!")
}
Scala 学习记录(一)的更多相关文章
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
随机推荐
- POJ3080 Blue Jeans —— 暴力枚举 + KMP / strstr()
题目链接:https://vjudge.net/problem/POJ-3080 Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total ...
- ap和路由器有什么区别 ap和路由器的区别介绍【图文】
现在能够摆脱网线限制能够自由方便上网的WiFi和无线网络也来越流行,很多酒店.饭店.宾馆.办公楼等地方都会提供无线网络.而能够提供无线网络的设备有很多,现在我们介绍的是无线ap和无线路由器.那么,ap ...
- 根据用户时区显示当地时间 javascript+php
在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯. 1. [代码][JavaScript]代码 ...
- WAS:节点不同步问题
刀片服务器硬盘坏了,换了硬盘后,通过dmgr无法重启该节点上的server. 单机./starServer 后,服务虽然启动了,但后台一直提示如下: [-- ::: CST] RoleViewLead ...
- oracle long 转varchar2
函数: /* 其中in_rowid为行id,in_owner为数据库登陆的帐号名,in_table_name为数据库表名,in_column为数据库对应long类型的表字段名称 */ CREATE O ...
- CodeForces-668D:Remainders Game (中国剩余定理||理解)
Today Pari and Arya are playing a game called Remainders. Pari chooses two positive integer x and k, ...
- Transformations
链接 分析:根据操作模拟 /* ID:wanghan PROB:transform LANG:C++ */ #include "iostream" #include "c ...
- Vue之组件的内容分发
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUF ...
- 洛谷P2473奖励关——状压DP
题目:https://www.luogu.org/problemnew/show/P2473 还是对DP套路不熟悉... 像这种前面影响后面,而后面不影响前面的问题就应该考虑倒序递推: 看n只有15那 ...
- spark api之一:Spark官方文档 - 中文翻译
转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linking with Spark) 3 初始化Spark(Initi ...