【SCALA】1、我要开始学习scala啦
因为scala也是基于jvm上运行的,所以能跑java,原则上就能跑scala
1、国际惯例,先来个hello world走走
package demo1 //object之下全为静态,scala没有static这玩意
object HelloWorld { //def 函数定义 args参数 后面接冒号然后是参数类型java反着来的,如果是java,那么就是String args[]
//最后main() 之后接 : 然后是这个函数反馈的类型 Unit代表没有反馈类型
def main(args : Array[String]) : Unit = {
//进去之后,该怎么样就怎么样。。。。
//还有scala可以不用写分号哦,真是为国家省布料。。。。
println("hello world")
} }
2.好,然后我们简单写几个程序,标识scala的基础入门吧
文件操作
package demo1 import java.io.File import scala.io.Source object FileDemo2 { def widthOfLength(s : String) = s.length.toString.length def fileLines(file : File) = Source.fromFile(file).getLines().toList
//静态变量
val filesHere = new File("./src/demo1").listFiles() def grep(pattern : String) =
//这里用()或者 {}都可以
for {
//遍历所有文件
file <- filesHere
if file.getName.endsWith(".scala");
//遍历这个文件的所有行
line <- fileLines(file)
if line.trim.matches(pattern)
} {
println(file + " : " + line.trim)
} def main(args: Array[String]): Unit = { 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 numSpace = maxWidth - widthOfLength(line)
val padding = " " * numSpace
println(padding + line.length + " | " + line)
}
} else {
Console.err.println("Please enter filename")
} grep(".*main.*") } }
这个功能用java实现,没个几百行估计搞不定。。。
光是文件输入输出的io操作代码,什么File = new File 什么InputStream,什么ReaderBuffer一堆的估计就要写个十几行
然后这里scala比较惊喜的是循环,特别是for循环,那是真的比较强大了
3.最后我们来看看for这个循环再scala中的应用为啥那么强大吧,特别是yield的使用,真是很方便了,直接避免了我们java中再for循环,或者while循环等等需要保存对象的时候的list.add操作,这里直接准备好丢给你,就看你要不要
要的话加个yield,不要就不加,很方便
package demo2 class FileDemo2 { def makeRowSeq(row : Int) =
for(col <- 1 to 10) yield {
val prod = (row * col).toString
val padding = " " * (4 - prod.length)
padding + prod
} def makeRow(row : Int) = makeRowSeq(row).mkString def multiTable() = {
val tableSeq =
for(row <- 1 to 10) yield {
makeRow(row)
} tableSeq.mkString("\n")
} } object FileDemo2 extends App { implicit def add(x : Int) = 2 * 2
for(season <- List("fall", "winter", "spring")) {
println(season + ": ")
} var a = 'asdasda
val a1 = "asdasda"
println(a + " ,nameis:" + a.name + s", value is:$a1 -> $a") println(2) val fileDemo2 = new FileDemo2
val listDemo2 = fileDemo2.multiTable()
println(listDemo2)
}
好啦,今天的学习就到这了,目前来看scala很像java的简化版本,毕竟是后java出来的,有些简化很正常,目前还没发现scala的独到的地方
当然除了它写代码确实很简洁,java几百行,这个用scala可能就十几行,或者几十行,代码量至少缩小一倍吧
后续学习,我们接着来挖掘scala吧
【SCALA】1、我要开始学习scala啦的更多相关文章
- 学习Scala第一篇-从hello World开始
最近开始系统性的学习scala.其实之前使用过scala的,比如我在用Gatling这款性能测试工具的时候就接触到了scala了.Gatling本身就是用Scala写的,而且Gatling的性能测试配 ...
- 怎样学习Scala泛函编程
确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...
- 学习Scala: 初学者应该了解的知识
Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...
- 如何快速学习Scala
大数据学习过程中,会学习非常多的技术,但SCALA无疑是必不可少,那我们在大数据技术的学习过程中,如何快速的认识scala,并且学习它,感谢科多大数据公司的余老师提供的详细素材,本人整理成章,希望对你 ...
- scala编程第16章学习笔记(2)
转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ...
- scala编程第16章学习笔记(1)
List列表的基本操作 head方法获得列表的第一个元素 tail方法获得列表除第一个元素之外的其它元素 isEmpty:判断列表是否为空,空的话返回真 last:获得列表最后一个元素 init:获得 ...
- Scala基础语言api入门学习
Scala的变量定义 变量定义 声明一个val变量类似与java的 public static final String 一致,一旦初始化不能改变,和java的泛型类似,Scala会帮我们进行类型推断 ...
- scala编程第17章学习笔记(4)——元组
元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...
- scala编程第17章学习笔记(3)
可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...
随机推荐
- [电脑]拆解DELL 2007FPb液晶显示器
最近修了不少三星214T显示器,拆卸很方便,多数更换电容就OK了.但有一台出现了花屏,怀疑是数码板出问题了.单位有台显示屏破碎的DELL2007FPb,拆了看看能否借用数码板. 图片:IMG_2063 ...
- Unity3D 2D模拟经营游戏 洗车沙龙 完整源码
Car Wash Salon Game 描述洗车模板与几个迷你游戏相关的汽车清洁,洗涤和装饰. 简单但有趣的游戏和伟大的视觉效果. 此模板不包含在应用中! 自定义应用程序的示例,有些功能在本项目中不受 ...
- vs2017发布后宕机,没有响应解决方法
找到项目下:Properties\PublishProfiles 删除:FolderProfile.pubxml.user
- mongodb批量update更新数据
需要先查找出相关的记录,然后循环处理更新数据.如下案例,更新所有status=1的数据的gender值为2 db.getCollection('test').find({"status&qu ...
- ubuntu18 更换屏幕分辨率
ubuntu18.04怎么修改屏幕分辨率 最近在自己的电脑中安装了ubuntu18.04系统,默认分辨率不对所以只好自己修改分辨率,但是在桌面右键并没找到设置分辨率的选项,那么我们应该在哪里设置分辨率 ...
- 【Java】 rapid-generator 代码生成器
rapid-generator是一个生成器引擎,让你可以专注与代码生成器模板的编写, 可以生成如ibatis,ibatis3,hibernate,spring_mvc,struts2等等代码. rap ...
- oracle DBA 常用表和视图
☆dba_开头..... dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数 ...
- Django models中的meta选项
通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...
- easymock的用法
常用场景 几个值随机取1个 "f08|1": ["有", "没有", "不知道"], 轮训抽一个 "f08|+ ...
- LeetCode_326. Power of Three
326. Power of Three Easy Given an integer, write a function to determine if it is a power of three. ...