1
jsonline 2014-05-09 00:10:16 +08:00
var magicNumber = Math.sqrt(Math.pow(_from.x() - this.x,2) + Math.pow(_from.y() - this.y,2));
return magicNumber 用了 JS 的 AMD 之后,你这根本就不能算长了, define(function(){ return { // 省略200行 } }) |
2
jakwings 2014-05-09 00:23:40 +08:00
断行缩进和变量赋值一样。可以根据是否要统一风格而选择要不要另起一个变量再 return。反正要将 return 改成变量赋值也不麻烦。
假如不同 return 语句返回值类型不同,可以用变量名来明确要返回的是什么,可以少加注释,同时统一 return 语句的简洁风格。 |
3
Mutoo 2014-05-09 00:26:37 +08:00
《重构》修改长return的 用的是“提炼方法”
function dist(x1,y1,x2,y2) { ... } ... return dist(_from.x(), _from.y(), this.x, this.y); |
4
jprovim 2014-05-09 03:37:48 +08:00
```javascript
return Math.sqrt(Math.pow(_from.x() - this.x,2) + Math.pow(_from.y() - this.y,2)); ``` |
5
NemoAlex 2014-05-09 09:30:07 +08:00
不要写比较长的 return 语句
除非你写的东西不是给人看的 |
7
zythum 2014-05-09 11:02:57 +08:00
|
8
yukirock OP 多謝各位回復。
這個問題我只是想討論關於 format 的問題,倒不涉及註釋怎麼寫……反正註釋要寫也頂多就是「求兩點間距離」這樣簡單的一句。 @jakwings > 假如不同 return 语句返回值类型不同,可以用变量名来明确要返回的是什么,可以少加注释,同时统一 return 语句的简洁风格。 我覺得簡潔有許多理解方式。例如如果要返回一個新生成的對象,大致是先聲明,再操作,最後只要簡單地 return newObject; 就好;但對於簡單的類型,例如這樣只涉及運算的 double,跳過中間變量也是一種簡潔。 當然這個例子太簡單了,不用註釋也沒問題,似乎並不適合拿來討論。 @Mutoo 這樣寫似乎並沒有簡化語義。 而且多一層函數調用可能會增加開銷,畢竟這個函數要調用很多次。 畢竟是要交到學校服務器上運行的作業,我倒並不想爲了可讀性犧牲性能。 @jprovim 這個看起來不錯,非常感謝。 @NemoAlex > 不要写比较长的 return 语句 > 除非你写的东西不是给人看的 ……果然是因爲這個只是簡單的求兩點間距離麼 @zythum > 不好理解就写注释。多写点注释比什么都强。 這樣的話給變量和函數起名都得花工夫了= = |
9
darasion 2014-05-10 19:36:11 +08:00
人能看懂就行了。不用纠结形式。
|
10
banxi1988 2014-05-11 08:54:57 +08:00
@Mutoo 按照重构的方法,
其实在这种情况下,还可以使用另一个方法,就是引入解释性的局部变量 : 将: return Math.sqrt(Math.pow(_from.x() - this.x,2) + Math.pow(_from.y() - this.y,2)); 改成: float xpow = Math.pow(_from.x() - this.x,2); float ypow = Math.pow(_from.y() - this.y,2); return Math.sqrt(xpow+ypow); |
11
FrankHB 2014-05-12 11:53:18 +08:00
标题问的只是语法问题,怎么连局部变量都来了。(不过后来好像还想要语义?那就随便吧。)
如果只是想治疗规范强迫症,具体结果看起来怎么样其实倒相对不重要了。 所有存在形式语法的语言通用的可保证结果唯一无歧义的方法:预测行数并指定上限,约定标点是否能出现在行首和行尾的策略,然后按节点高度优先顺序拆AST。(嘛,没有考虑对齐还真简单很多;能习惯有些情况下return后立刻换行就好……) |
12
uleh 2014-05-14 01:57:19 +08:00
单看格式的话,我一般会这么写
return Math.sqrt( Math.pow(_from.x() - this.x,2) + Math.pow(_from.y() - this.y,2)); |
13
uleh 2014-05-14 02:00:16 +08:00
空格被过滤掉了。。。
个人习惯是,函数里的内容换行。 并在调用处(即第一行的Math)空 4 格开始。 同级别的参数开头对齐。 也就是 2、3 行的 Math 是从第一行「.」的位置开始。 |