吐槽scala


— 如无必要,勿增实体 —


槽点1:多参数列表

你说一个参数列表也够了,非要使用多个参数列表,多个参数列表也就算了,调用的时候第二个参数列表即可以用圆括号也可以用花括号,然后花括号还可以换行,然后函数传参还是个匿名函数,最后搞的像写了一个函数一样,其实tm的是再调用一个函数。

比如这样的:


s.draw(Point(1.0, 2.0))(str => println(s"ShapesDrawingActor: $str"))
//上面的和下面相等
s.draw(Point(1.0, 2.0)) { str =>
	println(s"ShapesDrawingActor: $str")
 }

我就想吐槽了,这么多程序员,同样一个功能,有n总写法。居然还觉得优雅。

槽点2:字面量语法

真实恶心的语法。

  • 字面量怎么理解呢:可以理解为用"类型"两个字代替,也可以不去理解他,即省略。也可以理解为常量
  • 看似减少了打字的数量,实际上增加了阅读的难度,并且让实现一个功能又多出了一种写法,那么问题来了,不同的人又是不同的写法。

2.1 函数字面量

你看又是等号,又是两个等号箭头。tmd。

val f1: (Int,String) => String = (i, s) => s+i 
val f2: Function2[Int,String,String] = (i, s) => s+i
  • val表示定义了一个常量。

2.2 定义元组

val t1: (Int,String) = (1, "two") 
val t2: Tuple2[Int,String] = (1, "two")

槽点3:把省略当优雅

总以为省略的了一些东西,让代码变得更段,然后就更易读。省略很长的多余代码也就算了,为啥连 点 号都要省略。python都没有这样会搞事情,起码一种表达往往就一种写法,scala就特别会搞事情,一个事情就有很多种的表达方式。

比如:

1

  1. 定义无参的函数可以带括号也可以不带。调用也可以带和不带。新手需要花时间和精力去熟悉两者的使用情况。
  • 一个代码可以省略成这样,从上到下依次省略一些东西,直至看不懂为止(多写点会死啊!!):
List(1, 2, 3, 4).filter((i: Int) => isEven(i)).foreach((i: Int) => println(i)) 
List(1, 2, 3, 4).filter(i => isEven(i)).foreach(i => println(i)) 
List(1, 2, 3, 4).filter(isEven).foreach(println) 
List(1, 2, 3, 4) filter isEven foreach println

2

for (breed <- dogBreeds) 
	println(breed)

连括号都省了。

槽点4,把if写到for里面,俗称保护式

而且多个if之间也不加and或者or。

val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog")

for (breed <- dogBreeds 
	if breed.contains("Terrier") 
	if !breed.startsWith("Yorkshire") ) println(breed)

for (breed <- dogBreeds
	if breed.contains("Terrier") && !breed.startsWith("Yorkshire") ) println(breed)

还有一点就是,可以省略 区分代码段的东西。

4.1 tm的还可以在里面写表达式。

val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund", "Scottish Terrier", "Great Dane", "Portuguese Water Dog") 
for { breed <- dogBreeds 
	upcasedBreed = breed.toUpperCase()  //就是这个,明明可以写在for循环里面。
	} 
	println(upcasedBreed)

槽点5,大括号可以代替小括号

居然可以用大括号代替小括号,理由居然是更好看,好看个鬼。有些人写大括号,有些人写小括号,好看个鬼。

比如:

例1

for (breed <- dogBreeds) 
	println(breed)

我tm也可以这样写:

for {breed <- dogBreeds}
	println(breed)

真tm的好看。不知道的还以为是死循环呢。

槽点7,语句直接连接和分割定义不明确

未完待续…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值