21

假设我在视图中有一个函数,当某种状态改变时触发。最好给它起什么名字,为什么?

  • 状态变化
  • 状态改变
  • onStateChange
  • onStateChanged
4

6 回答 6

17

我个人更喜欢onEventName为 DOM 事件处理程序使用保持本机命名约定的名称。

喜欢myElement.onclick = function() { /* ... */ }活动click

所以myEvent我使用的是名为onMyEvent.

如果我有事件stateChange,那么我将使用onStateChange处理程序。

但实际上,这个问题对于每个开发人员团队和团队/公司内部的代码风格约定更为具体。

所以这类问题的主要目标是保持所有部分的代码风格相同,以确保可读性。

因此,如果您在一个团队中工作,只需遵守团队的代码编写约定,如果您独自处理现有代码,请尝试保持其代码风格(确定这种风格是否不明显)。

更新:理解。

什么是事件?粗略地说,它是在程序外部或内部发起的一个动作,换句话说,系统中发生了一些事情,例如一些状态变化(键盘、鼠标、I/O 设备等的状态)并不重要(用户点击在鼠标或某些程序上向系统发送鼠标点击信号)。

假设浏览器窗口已订阅以获取有关某些事件的通知,并且操作系统会尽快将它们发送给它,我们将假设在发生某些事情的同时。因此,如果用户在浏览器窗口处于活动状态并且文档具有焦点时单击鼠标,则浏览器会告诉文档以触发click事件。在这里我们的onclick处理程序开始它的调用。换句话说,系统告诉我们现在发生了某种状态的变化。我们正在处理这个变化,而不是在处理一个事实,告诉我们状态已经改变。

假设我们的处理程序命名为onClicked. 由于处理程序的名称是过去时态,我们可以得到一个合理的问题:“当点击时,它发生在多长时间前?它被点击了多少次?嗯,也许现在处理这个动作(或动作?)已经太晚了。 ……”。所以这个名字告诉我们在过去的某个时间发生了一些事情。

相比之下,当我们的处理程序命名onClick为时,显然该click事件只是触发并触发了一次,并且我们立即收到了通知。我们将处理点击事件——信息告诉我们鼠标的状态现在改变了(不是鼠标点击,而是点击事件)。

因此,过去时的名称更适合我们需要检查某个状态是否已更改的情况。例如,如果变量存储了state = 1我们可以调用函数isStateChanged();,它将state变量中的值与当前时刻的实际值进行比较。在这里,过去时是命名的好选择。

于 2012-08-16T15:13:38.397 回答
7

onStateChanged因为只要某种状态发生变化,这个函数就会触发。

于 2012-08-16T15:08:18.053 回答
6

我用谷歌搜索了几个名字,并注意到返回的结果数量。您可以了解事件处理程序最常见形式的相对流行程度:

stateChanged 168k
stateChange 81k [1] 
handleStateChange 61k
onStateChange 59k 
onStateChanged 12k 
beforeStateChange 2k

[1] 结果显示 stateChange 主要用作事件的名称,而不是处理程序。

使用不同的事件类型对 onStateChange 表单给出了更强烈的建议:

change [2]
onChange 2000k
onChanged 85k
handleChange 36k
beforeChange 27k
afterChange 22k

click [2]
onClick 48000k
onClicked 58k
handleClick 50k
beforeClick 8k [3]

onDrag 100k
handleDrag 36k
beforeDrag 32k
afterDrag 4k
onDragged 5k

[2] 与编程无关的结果太多。

[3] 显然,某些 Microsoft API 可以预测用户何时点击。

于 2013-04-30T07:46:50.467 回答
3

我的赌注是stateChanged

  • stateChange看起来像一个订单,看起来它收到了一个带有新状态的参数。
  • onStateChange并且onStateChanged是用于存储处理程序的更多键,而不是处理程序本身的名称。

恕我直言

于 2012-08-16T15:12:59.150 回答
1

我通常选择 2 因素事件名称。随着应用程序的大小增加,您可能拥有多个状态更改的对象,或者可能有一个控制器可以为多个对象广播更改事件,因此希望能够在代码和您的头脑中区分它们:

Object1:event
Object2:event

至于哪个事件名称,我认为这取决于个人喜好和一致性。

于 2012-08-16T21:12:57.987 回答
0

我认为应该根据行动发生的实际时刻做出改变。对我来说 onStateChange 意味着它目前正在改变,我可以在改变之前从技术上得到通知。OnStateChanged 表示该操作已经发生,并在结束时通知我。

因此,在 onStateChange 和 onStateChanged 之间存在重要的意图差异。第一个说“为这种变化做好准备”,而第二个说“它已经发生了”。

编辑:我被这个意图冲昏了头脑,并没有意识到命名本身。为什么是 on 前缀?这是为处理程序保留的。处理程序将执行与该事件相关的事情。所以我会选择 stateChange 和 stateChanged。

于 2013-06-07T12:19:39.970 回答