吐槽:到底什么是“优雅”? PHP 的新名词真是含义莫名……

2022-07-10 22:07:18 +08:00
 uiosun

本周工作日的某一天,

翻开一篇博客园文章:“……这样写更优雅……”、

打开一篇 Laravel 某个特性的介绍:“……这个框架……以优雅著称……”。

优雅到底是什么?小布尔乔亚?是我漏了什么吗?

去逛 Stackoverflow 、去大佬们的独立博客、去 Github 讨论问题,大家都直接讲“稳定”、“安全”、“性能”、“可读性”、“模块化”……

我记得,Yii2 那时的 Slogan 是 “安全、稳定、高效”,现在竟然给我一种“都在吹优雅”的感觉。

( Ps:上一次给我留下印象的“优雅”,还是小红书里的名媛)

7122 次点击
所在节点    程序员
75 条回复
Laussan
2022-07-11 13:03:18 +08:00
高斯绝妙定理对高斯曲率是内禀性质的证明可称优雅。
iosyyy
2022-07-11 13:13:03 +08:00
@wonderfulcxm 我前几天还看到有拿 go 和 java 比的也不知道哪来的自信..天天吹那低心智满屏幕的 err 不知道哪低心智了
panlatent
2022-07-11 13:55:41 +08:00
@uiosun laravel 称得上是优雅,我是 yii 用户 但我觉得更能代表 yii 的词是:实用
mhqschen
2022-07-11 14:01:58 +08:00
我一直以为优雅这个词是《间谍过家家》带火的~
fuchish112
2022-07-11 14:25:10 +08:00
在命名规范,语义化方面确实比其他 php 框架要好一些
lovepplforever
2022-07-11 14:33:16 +08:00
laravel 抄袭 rails 的
blless
2022-07-11 14:42:36 +08:00
@iosyyy #42 现在满屏还在说 Go 的 err 是我最不能理解的事,有异常本来就是司空见惯的事情,你不处理不代表异常就消失了,处理少了,只能说你的错误在哪个不知道的环节被吞了而已。
我现在看见 Java 代码的 try catch 就害怕,有些甚至都不是新人,遇见异常就无脑 catch ,函数签名基本看不见几个 throw 的。
blless
2022-07-11 14:46:08 +08:00
要我说 Go 优雅,肯定是 defer 跟协程了。defer 现在不知道有啥语言支持,反正 Go 里面是真的优雅跟省心。协程就不用说了,事实证明这一套 go select channel 设计,我反正还没看见别的语言能说超过 Go 的。
iosyyy
2022-07-11 15:09:56 +08:00
@blless 有异常并且把异常消除才是最好的办法一般情况下 java 的异常都统一处理了 而 go 的异常直接放在返回值里面才是最蠢的 我返回一个 err 下面所有的函数都需要对不同的 err 都接收 而 java 我直接 catch 或者直接抛出去统一处理就行了 而你说的 defer 实际上写起来也相当的乱 一旦我 defer 调用的方法返回有 err 那处理起来是相当的费劲
blless
2022-07-11 15:25:01 +08:00
@iosyyy #49 “有异常并且把异常消除才是最好的办法”,虽然很多观点是自由心证自说自话,但这句真的没法苟同的。“Let it crash”也算 Go 设计哲学之一,一开始也不算认同。Bug 处理多了,血泪教训之下对 Go 某些设计还是觉得入木三分。从这点出发,Java 如果要认真处理每个异常错误的话,也得一个一个函数 throw 而且加上签名,真的比满屏 err 好不到哪。 不过 Java 语法糖多,用修饰处理异常啥的方法手段确实比较多且节省时间。其他就不多说了,语言流行自有他的道理,讨论多了也累。
1988chg
2022-07-11 15:29:00 +08:00
起码是相对规范吧。
string2020
2022-07-11 15:34:30 +08:00
如果一个普通人看到一个东西觉得舒服,觉得可以学习,觉得得体,那这个东西就是就是优雅的
Felldeadbird
2022-07-11 16:07:30 +08:00
个人认为:某版本引入了 强大又实用的语法糖。 语法糖一看就是一种糟粕,书本上说语法糖要慎用。 经过转译: 新版引入优雅的编码方式。
bestwaytowait
2022-07-11 19:57:33 +08:00
现在 modern 都快不够用了,现在要 post-modern 。马上就不知道该用什么词了
liuxu
2022-07-11 20:33:24 +08:00
既然都是 phper ,就以你过去曾经提过的 2 个技术问题来回答

第一个:如何生成“连贯的数据”用于自动化测试? https://v2ex.com/t/814879
解决你这个问题,在 laravel 中只需要定义相关 model 和 factory 即可,https://laravel.com/docs/9.x/database-testing
而语法定义非常简单直观:
class BuildingFactory extends Factory
{
public function definition()
{
return [
'user_id' => User::factory(),
'city_id' => City::factory(),
'type' => $this->faker->randomDigit(),
];
}
}
以上建筑 factory 定义了与 user 和 city 的关系,创建建筑会自动创建对应的 user 和 city ,也可以用其他链式语法反着创建


第二个:怎么让一个任务在发起后的第 6 个小时,自动执行? https://v2ex.com/t/787949
这个问题你可以使用 laravel 的调度器,去处理当前超过 6 小时的任务表即可,https://laravel.com/docs/9.x/scheduling
$schedule->job(new BuildingSomting)->everyMinutes();

更常用的,你可以使用队列,通知和任务模块处理此事: https://laravel.com/docs/9.x/queues
ProcessPodcast::dispatch($buildingPodcast)->delay(now()->addHours(6));

回到你的问题,什么是优雅"elegant syntax",就是用非常直观易懂的语法来实现工程任务,laravel 是个工具完备的 web 框架,不需要为了技术方案发帖询问

楼上有人说,书本上说语法糖要慎用,这里我同样引用书上说的:尽信书不如无书,近十年各类编程语言的发展,大量语法糖的加入,就是为了让代码更加通俗易懂
james122333
2022-07-11 20:45:37 +08:00
@
感谢
Reply 40
seth19960929
james122333
2022-07-11 20:56:40 +08:00
@seth19960929

基本上一堆既有框架使用派都跟你一样想法
认为自己写的不成熟 然而你并不需要该框架全部功能(含哲学性功能) 一些功能也有其它实现方式 php 原生就含有丰富的功能 我只是在表明你跟据原生手册实现一个体系一个框架并不难 laravel 效能差有目共睹 很多人讲的优雅其实封装一下完全不会差过它 并不是很凸出的特点
panlatent
2022-07-12 01:33:31 +08:00
@james122333

造框架一事上,并非如此你说的这样“简单”。先不说成不成熟,有没有人用这些问题,甚至不考虑从头造,就单纯用现有成熟度高的库作整合,拼一个框架,编码和思考的工作量并不低。

设计模式、编程思想、工程实践,算法 结合上语言的特点,这些落地并且弄的圆润舒适我觉得是相当难的。

虽然说有个玩笑话说没自己写过一个框架都不好意思学过 PHP ,但这玩意真是自己写着玩没问题,自己用没问题,甚至按公司业务造一个也没问题。 但要是真弄个通用的框架,难。总不能为了框架而框架吧,大多数人也没那个精力,写出来不能解决一定问题,还不如把时间拿来赚钱陪陪家人
haoliang
2022-07-12 02:45:03 +08:00
哈哈,都没人在意我这个拼写错误: idiomatic
kaiger
2022-07-12 09:33:17 +08:00
优雅?
大概是我一只手端着咖啡小抿一口,一只手在键盘上像弹钢琴一般地有节奏地敲着我的 24k 纯金键盘,在电脑屏幕上输出 "hello world" ,然后感叹一声,“真累。”

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

https://www.v2ex.com/t/865309

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

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

© 2021 V2EX