gpt4 book ai didi

oop - 为什么分别坚持 get-set 而不是 car.speed() 和 car.speed(55) ?

转载 作者:行者123 更新时间:2023-12-04 00:07:18 25 4
gpt4 key购买 nike

除了明确的清晰度,我们为什么要坚持:car.getSpeed()car.setSpeed(55)当这也可以使用时:car.speed()car.speed(55)
我知道 get() 和 set() 通过将所有内容放在一个地方来保持对数据成员的任何更改都可管理很有用。

另外,显然,我明白 car.speed()car.speed(55)函数,这使得这个错误,但是在 PHP 和 Zend Framework 中,相同的操作用于 GET、POST、回发。
在 VB 和 C# 中有“属性”,并且被很多人使用,我听说过的纯粹主义者对此感到厌恶,而 Ruby 中也有类似 5.times 的东西。和 .each , .to_i等。
你有运算符重载、多重继承、C++ 中的虚函数,它们的某些组合可能会让任何人发疯。

我的意思是说,有如此多的范式和完成事情的方式,以至于没有人尝试过我提到的特定组合似乎很奇怪。

至于我,我的理由是它是短小精悍 代码。
我是不是很错,稍微错了,这只是奇怪所以没有使用,还是其他什么?

如果我仍然决定保持正确,我可以使用 car.speed()car.setSpeed(55) .
这有什么问题吗(只是省略了“get”)?

感谢您的任何解释。

最佳答案

如果我调用car.speed(),我可能会认为我在告诉汽车加速,换句话说就是提高速度并突破速度限制。它显然不是一个 setter/getter 。

某些语言允许您声明 const 对象,然后限制您只能调用不修改对象数据的函数。所以需要有单独的修改和读取操作的功能。虽然您可以在参数上使用重载来实现两个功能,但我认为这会令人困惑。

另外,当你说阅读更清晰时,我可以争辩说我必须提前看一下才能理解如何阅读它:

car.speed()

我读了“车速……”,然后我看到没有数字,所以我修改并考虑“获取车速”。
car.getSpeed()

我读到“为了这辆车,加快速度”
car.setSpeed(55)

我读到“对于这辆车,将速度设置为 55”

似乎您基本上引用了该语言的其他功能令人困惑,然后将其用作使 getter/setter 更加困惑的辩护?几乎听起来像是在承认您提出的建议更令人困惑。这些功能有时会令人困惑,因为它们的用途非常广泛。有时抽象可能更令人困惑,但最终它们通常服务于更可重用的目的。我想如果你想支持 speed() 和 speed(55),你会想展示它们如何为程序员带来新的可能性。

另一方面,C# 确实具有类似于您所描述的内容,因为属性作为 getter 或 setter 的行为取决于它们使用的上下文:
Console.WriteLine(car.Speed); //getter

car.Speed = 55 //setter

但是虽然它是一个单一的属性,但有两个单独的代码部分用于实现获取和设置,很明显这是一个 getter/setter 而不是函数速度,因为它们省略了 () 属性。所以 car.speed() 显然是一个函数,而 car.speed 显然是一个属性 getter。

关于oop - 为什么分别坚持 get-set 而不是 car.speed() 和 car.speed(55) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2051713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com