可以讲下你看到的编程语言的美吗?

14 天前
 nnegier
我是写 java 代码的,感觉后续的一些语法更补不是很让人满意,只是写习惯了,不过也萌生了对那种编程语言的美的思考,表现力强,整洁优美,但我自身接触的语言实在有限,所以想想问问大家,如果可以,也希望可以附上一段你喜欢的代码。

自己提下 python 吧,但只接触过一点,未实际项目,它有一种语法层面的整洁美,那个缩进。
4432 次点击
所在节点    程序员
62 条回复
charlie21
13 天前
https://www.zhihu.com/question/22508677/answer/276595266 阿莱克西斯: 编程到底难在哪里?
dwu8555
13 天前
C#的 LINQ 遥遥领先,最美担当

june4
13 天前
@dwu8555 这个和别的普通语言的函数式库有什么特殊优势吗?
比如 js 类的也是一行就行: R(scores).filter(s => s > 80).map(s => s)
kidlj
13 天前
Swift 的闭包挺美的。argument label 也挺好的,独一份。
ddup
13 天前
用过 c# java typescript vb c++ php
c# 是最美的,尤其是 linq 和模式匹配,方便美丽又高效
thoo61871
13 天前
在厂里打螺丝的工人会觉得螺丝刀美吗
nicebird
13 天前
暂时没有觉得美过
9LCRwvU14033RHJo
13 天前
@dwu8555 Python 是这样一行而已
```py
scores = [97, 92, 81, 60]
scoreQuery = [s for s in scores if s > 80]
print(scoreQuery)
```
mcfog
13 天前
你只是看的少了
....觉得有些新鲜感
....文面上简洁,基本意味着语法或机制的复杂
....而语法简洁,基本意味着文面上有冗余
....美和美之间是有冲突和矛盾的
....所以大家说谁美谁不美,可能实际上实在争论 xp
dragondove
13 天前
@dwu8555 你这个例子不太能表现出 LINQ 的优势,对应的 scala 代码如下
```scala
val scores = Array(97, 82, 60, 99)
val r = for score <- scores
if score > 80
yield score

println(r.mkString(" "))

```
python 也可以做到更简洁
```python
scores: list[int] = [97, 92, 81, 60]
r = [score for score in scores if score > 80]
print(" ".join([str(x) for x in r]))
```
dragondove
13 天前
@scp3125 Result 对比 Checked Exception 并没有显著的优势,你的例子换成 java 写可能还更简洁
```java
public static String readFile(String path) throws FileNotFoundException, IOException {
File file = new File(path);
try (var fis = new FileInputStream(file)) {
return new String(fis.readAllBytes());
}
}
```
异常靠 throws 传播,和你的问号作用基本是一样的,函数的返回类型还更简单,模式匹配靠 catch 匹配,能达到相同的效果,代码还更简洁。
dragondove
13 天前
@Dropless 创建对象的话,kotlin 和 scala 都可以直接 `val person = Person()` 也足够简洁(数字符的话和 Person person = new() 是一样多的),不过 scala 中内置的想法会不太一样,scala 是 universal apply (实际上调用的是 Person 伴生对象的 apply 方法)更加通用一些,也可以自行改造成工厂方法(用起来和构造器一样,实际是工厂,更加统一)
noahlias
13 天前
Haskell 绝妙的美

powerSet = filterM (const [True, False])
Flourite
13 天前
美是一种很主观的事情,自己尝试看喜欢什么。it 行业这种言论多的是宗教,以后 ai 直接把他们都灭了
dragondove
13 天前
@mcfog 和语言设计者的功底也有关,以及语言提供多大的自由度(有时候限制自由是好事),举个例子,scala 没有运算符重载,但是也可以给任意类型添加运算符。因为 scala 的函数名可以为符号,结合扩展方法和中缀表达式就可以给类型添加运算。scala 中 `1 + 2` 就是 `1.+(2)` 而已。这样就不需要额外引入运算符重载的语法了。缺点就是自由度过大,导致一些库作者玩的太花,各种自定义运算符满天飞。所以有时候限制自由度是有好处的
LieEar
13 天前
虽然我也写过一年 java ,但是我觉得 java 是最丑的。
我觉得 python 的推导式很美
9LCRwvU14033RHJo
13 天前
那种老油条,倚老卖老,我吃过的盐比你吃过的米还多,居然也会出现在互联网行业。
dwu8555
13 天前
@user8341 #48 c# 的 linq 还能能应用在各种数据库上,甚至是 XML 。
liuliuliuliu
13 天前
@dwu8555 #42
@dragondove #50

可能稍微复杂一点的例子会好些,例如
var results = from p in persons
where p.Age > 18
orderby p.Name ascending, p.Age descending
select new { p.Name, p.Age };

这 persons 可以是数组、List 、数据库、xml 等等
假如是数据库会通过表达式树直接转换成 sql
chachi
13 天前
c#的 lambda 表达式更符合直觉
var result = people
.Where(p => p.Score > 80)
.OrderBy(p => p.Name)
.Select(p => p.Name)
.ToList();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1108327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX