【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”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...
随机推荐
- 安装adbyby
搞得那么麻烦干什么,助人就要直接点嘛请用 Xshell 连接你的路由 1.安装curlopkg update && opkg install curl 2.创建相关文件夹(如已经安装a ...
- 在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)《转》
https://blog.csdn.net/zhuhongshu/article/details/54193842 源码包下载地址:点我下载 最终Dll.Lib.PDB.头文件下载地址(release ...
- MySQL两地三中心方案初步设计【转】
整体内容会按照如下的方式来进行设计: 首先说下方案的背景,我参考了一些资料(参见附件). 方案背景 随着互联网业务快速发展,多IDC的业务支撑能力和要求也逐步提升,行业内的“两地三中心”方案较为流行. ...
- 自然语言处理中注意力机制---Attention
使用Multi-head Self-Attention进行自动特征学习的CTR模型 https://blog.csdn.net/u012151283/article/details/85310370 ...
- numpy中的mean()函数
本文链接:https://blog.csdn.net/lilong117194/article/details/78397329mean() 函数定义:numpy.mean(a, axis, dtyp ...
- Thread.currentThread与this的区别
在看多线程的时候,看到这个知识点,感觉需要验证一下. 一:线程自启动 1.程序 package com.jun.it.thread; public class MyThread extends Thr ...
- Windows下压缩包安装Mysql
1. 下载mysql压缩包 2. 解压到指定目录,例如D:\Program Files\mysql-5.7.25-winx64 3. 在目录下创建配置文件my.ini [mysqld] port = ...
- Django安全配置(settings.py)详解
必须配置项 PASSWORD_HASHER 这个配置是在使用Django自带的密码加密函数的时候会使用的加密算法的列表.默认如下: PASSWORD_HASHERS = ( 'django.contr ...
- VS2010/VS2012/VS2015下openGL环境配置(转)
按:按照下述博文,三个例子均成功. https://blog.csdn.net/so_geili/article/details/51685005 请仔细阅读每一个字. 为了学习<OpenGL超 ...
- 数据标记系列——图像分割 & Curve-GCN
在之前的文章中(参考:),我们提到了Polygon-RNN++在数据标注中的应用.今天不得不提到多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果显示图像标注速度提升10倍. Cu ...