$X

原创 2006年06月29日 11:10:00
可能自从prototype引入$()后,使用$起头的短名字就成为风潮。随便列举如下:

prototype:

$(id, ...)  基本上是document.getElementById的缩写
$A(a)  转换到Array
$R(...)  产生一个Range
$H(h)  产生一个Hash
$F(c)  返回form control的值

jQuery:

$(css)  根据css selector查询
$(xpath)  根据xpath查询
$(element)  返回wrap后的元素
$.get()  http get
$.post()  http post

多数js toolkit或者框架都沿袭prototype的道路,例如atlas。不过linb似乎走的更远。

linb:

$d$
$h$
$ID$
$SC$
$CLASS$
$thread$
$E$
$DD$
...
除此之外还有:
转型
_.A
_.B
_.D
_.F
_.H
_.N
_.S
判断类型
_.isA
_.isB
_.isD
_.isF
_.isH
_.isN
_.isS
其中,A表示Array,B表示Boolean,D表示?(一时忘记了),F表示Function,H表示Hash,N表示Number,S表示String。

一般而言,为脚本提供一些短名字是很有价值的。但这只限于最常用的功能,prototype的例子便是如此。如range,虽然一般js很少用range,但prototype受到ruby的影响很大,故会大量使用range,为其找一个$R的缩写也是情理之中。

反观linb,虽然从A到S等缩写还算贴切,但对于$和_的过度使用就有些走火入魔。特别是$xxx$,在cvs和svn中,$xxx$常作特别用途,如$Id$来插入id。

此外$和_在js社区来说,还有一些用法约定。例如_开头的通常表示private,$开头的通常表示内部参数或者具体实现的细节(如dean edwards的压缩器就是如此),或者用$开头来避免与关键字冲突。如果没有适当的理由,最好不要破坏这种惯例。当然prototype建立了一个新的 惯例,即用$X($后跟一个大写字符)来作为最常用函数的缩写。但是不是谁都能做到创立新的惯例的。

我们都知道代码的清晰性比单纯的代码长短更重要。短名字再精巧,也是需要人记忆的。如果一个人有兴趣来选择linb,必然会有先看看example,但是 example中充斥着大量的$x$或者_.X之类的符号,对不熟悉的人来说形同天书。这样的学习曲线,必然会影响linb的推广。况且$和_都是需要 shift才能输入的字符,考虑这一点,$E$比Event,_.isA比isArray的写法又有什么优势?

一个较为合理的方式是,将$X作为一个长名字的缩写,使用者可以用长名字,也可以使用缩写。这样的缩写不宜太多,特别是没有必要像分果果一样给26个字母都安一个缩写功能。

linb还存在一些其他问题,我会另文讨论。





 

解方程x[x[x[x[x]]]=2006

  • weiyanghuadi
  • weiyanghuadi
  • 2014年01月18日 17:25
  • 288

lambda x:x*x

整理自:廖雪峰的讨论区 https://www.liaoxuefeng.com/discuss/001409195742008d822b26cf3de46aea14f2b7378a1ba91000/...
  • qq_40118071
  • qq_40118071
  • 2018年02月01日 21:30
  • 70

X ? X :X ;出错

#include int runnian(int x) { return x%100?!(x%4):!(x%400);//return x%100?(!x%4):(!x%400);非运算符先运算 ...
  • u014004602
  • u014004602
  • 2014年08月25日 16:37
  • 265

输出(x/1!)+(x*x*x/3!)+(x*x*x*x*x/5!)+````

学习使用递归算法#include #include #include #include using namespace std; double digui (double x,double n); d...
  • qq_29486343
  • qq_29486343
  • 2015年07月26日 16:55
  • 335

x & (-x)

结论 整数运算x & (-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。 解析&是按位与操作,即: 1 & 1 = 1, 1 & 0 = 0, 0 ...
  • f_zyj
  • f_zyj
  • 2016年06月09日 23:20
  • 342

Why is 'x' in ('x',) faster than 'x' == 'x'?

Question: >>> timeit.timeit("'x' in ('x',)") 0.04869917374131205 >>> timeit.timeit("'x' == 'x'") ...
  • u013152895
  • u013152895
  • 2015年03月25日 11:11
  • 1421

x == x

C的表达式 x == x,何时为假呢?即下面的代码: if (x == x) { printf("Equal\n"); } else { ...
  • lxbwolf
  • lxbwolf
  • 2016年11月19日 20:04
  • 148

#define SQR(X) X*X

#include "stdio.h"#define SQR(X) X*X  //非SQR(X) (X)*(X)int main(int argc, char* argv[]){ int a=10,k=...
  • puyuen
  • puyuen
  • 2004年11月17日 21:58
  • 758

#define SQR(x) (x*x) 值的探究

#include #define SQR(x) (x*x) int main() { int a,b = 3; a = SQR(b+2); pr...
  • hzwy23
  • hzwy23
  • 2014年03月20日 19:46
  • 1116

∀x(P(x) → Q(x))和∀xP(x) → ∀xQ(x) 的区别

∀x(P(x) ->Q(x))和∀xP(x) -> ∀xQ(x) 令P(x) 为矛盾式,可为真也可为假  令Q(x)为假 因为P(x)不是一直为True,所以∀x(P(x) → Q(x)...
  • u010632454
  • u010632454
  • 2014年01月21日 21:42
  • 1157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:$X
举报原因:
原因补充:

(最多只允许输入30个字)