Javascript 在JS中格式化简单When函数的最佳方法
我在Ruby中找到了这段代码(来自): 考虑到JS缺少“when”函数,我在考虑如何在JS中最好地格式化它 作为参考,N、S、E和W是“方向”,它们的别名如下:Javascript 在JS中格式化简单When函数的最佳方法,javascript,readability,code-readability,Javascript,Readability,Code Readability,我在Ruby中找到了这段代码(来自): 考虑到JS缺少“when”函数,我在考虑如何在JS中最好地格式化它 作为参考,N、S、E和W是“方向”,它们的别名如下:const N=1、S=2、E=4、W=8 我最初想制作一个快速箭头功能,但后来我做了如下操作: function DX(dir) { if(dir==E) return 1; if(dir==W) return -1; if(dir==N) return 0; if(dir==S) return 0; }
const N=1、S=2、E=4、W=8代码>
我最初想制作一个快速箭头功能,但后来我做了如下操作:
function DX(dir) {
if(dir==E) return 1;
if(dir==W) return -1;
if(dir==N) return 0;
if(dir==S) return 0;
}
我觉得有点长,所以我试着缩短它:
function DX(dir) {
if(dir==E) return 1;
if(dir==W) return -1;
return 0;
}
然后再说一遍:
function DX(dir) {
return dir==E ? 1 : dir==W ? -1 : 0;
}
但现在我们遇到的问题是,这段代码不是很可读。因此,我决定将其记录下来:
// returns the distance in x traveled by that direction
// E => 1, W => -1, N => 0, S => 0
function DX(dir) {
return dir==E ? 1 : dir==W ? -1 : 0;
}
最后,我将其转换为变量语法和箭头函数:
let DX = (dir) => dir==E ? 1 : dir==W ? -1 : 0;
很明显,所有这些代码都是有效的,但我的问题是作为一种风格,在行业中,在你看来,或者在你具体工作的地方,哪一种被认为是“最好的”?我假设可读性高于一切,那么您认为哪种代码可读性最好?我个人更喜欢有文档的部分。对一个对象也一样
const DX = { E: 1, W: -1, N: 0, S: 0 };
// use
value = DX[dir];
要将数值用作方向,需要将关键点映射到方向
// N S E W
const DX = { 1: 0, 2: 0, 4: 1, 8: -1 };
// use
value = DX[dir];
我建议您创建一个将方向映射到别名的对象,并使用它从函数返回正确的别名
constdx=dir=>{
映射={E:1,W:-1,N:0,S:0};
返回映射[dir];
}
通过使用上面几个用户建议的对象,我们可以使代码更简单。但是,我们遇到了对象使用文本字符串“N”、“S”、“E”和“W”而不是变量的数值1、2、4和8的问题
我找到了这个问题的答案,就是添加方括号(在ES6中):
它可以用于:DX[dir]
哇,IDK为什么我从来没有想过。谢谢你的回答:)我会投赞成票,但我不会接受,因为我想继续讨论,如果可能的话,给其他方法一些时间。另一种变体是省略N
和S
键,然后是DX[dir]??0
。这可能也适合这个用例。DX=dir=>{E:1,W:-1}[dir]??0
并使用asvalue=DX(dir)
@jonaswillms,将值分隔为更多(混乱的)代码。实际上,这不起作用。它将文字字符串“E”赋值为1,而不是变量E(数值)4的值。所以DX[dir]返回NaN,因为4没有映射到任何东西。使用一个对象是个好主意,并且仍然使它成为一个类似于我上面的函数。然而,这个答案仍然与Nina的答案一样,字母被映射到字符串“E”、“W”等,而不是带有数值(1、2、4、8)的变量DX=dir=>!!(dir&4)!!(dir&8)
。只是开玩笑而已。
// N S E W
const DX = { 1: 0, 2: 0, 4: 1, 8: -1 };
// use
value = DX[dir];
const N = 1, S = 2, E = 4, W = 8;
const DX = { [E]: 1, [W]: -1, [N]: 0, [S]: 0 };