Javascript 当初始值设定项也是循环设定项时,如何保持循环干燥?
对于这种基本循环类型,我想不出一种方法来保持代码的可读性和干性(不要重复自己的代码),在这种循环类型中,初始化一个值,然后每次都做同样的事情,这让我很恼火。这种情况经常发生在读取文件之类的事情上。很明显,我可以重复初始值设定项,有时还可以将其清理成一个函数,但这让我很烦!我怎样才能做到干净呢 FOR循环Javascript 当初始值设定项也是循环设定项时,如何保持循环干燥?,javascript,Javascript,对于这种基本循环类型,我想不出一种方法来保持代码的可读性和干性(不要重复自己的代码),在这种循环类型中,初始化一个值,然后每次都做同样的事情,这让我很恼火。这种情况经常发生在读取文件之类的事情上。很明显,我可以重复初始值设定项,有时还可以将其清理成一个函数,但这让我很烦!我怎样才能做到干净呢 FOR循环 让员工人数=0; 为了( 让isHeads=Math.random()>0.5; isHeads; isHeads=Math.random()>0.5//重复 ) { 编制++; } 控制台日志
让员工人数=0;
为了(
让isHeads=Math.random()>0.5;
isHeads;
isHeads=Math.random()>0.5//重复
) {
编制++;
}
控制台日志(员工总数);
WHILE循环
让员工人数=0;
让isHeads=Math.random()>0.5;
while(isHeads){
编制++;
isHeads=Math.random()>0.5;//重复
}
控制台日志(员工总数);
难读循环
显然,我可以删除变量名,但这会影响可读性,对于读取文件之类的内容,您无法看到该值设置为什么
让员工人数=0;
while(Math.random()>0.5){
编制++;
}
控制台日志(员工总数);
例如,如果要读取该值,则需要将其放入某个变量中:
函数rollDie(){返回Math.floor(Math.random()*6)+1;}
函数playGame(){
让roll=rollDie();
分数=0;
while(滚动!=1){
log(`yourollad${roll}!Yay!`);
得分+=滚动;
roll=rollDie();//重复
}
log(`噢,不,你掷了一个1!你的分数是${score}`);
}
我的皮棉讨厌我
您可以在条件行中设置一个变量,但每一个值得一试的短绒都会受到惊吓,通常会用红色在下面加下划线:
让员工人数=0;
让我们来看看广告;
而(isHeads=Math.random()>0.5){
编制++;
}
控制台日志(员工总数);
将抛硬币测试作为一个函数,如heads()
,以消除这种复杂性并清楚地说明您在做什么。“难读循环”实际上是您应该使用的形式,并不难读。这是非常传统的,也是我所期望看到的
你最终得到的是:
函数头(){
返回Math.random()>0.5;
}
职能部门负责人(){
让计数=0;
while(heads()){
计数++;
}
返回计数;
}
现在你可以称之为:
console.log(人头计数());
这样的代码更容易测试,因为每个函数都做一件特定的事情。例如,您可以验证heads()
函数在50%的时间内实际返回true
50%,而不是49.99995%或50.000003%,或者由于RNG的怪癖而可能发生的任何情况,因为该函数是直接公开的,并且具有单一的用途
在可读性方面稍有牺牲,但技术上更紧凑,您可以将重写为for
:
函数人头计数(){
让我们数一数;
对于(计数=0;头();++计数);
返回计数;
}
这并没有多大帮助,只是作为一种替代形式出现在这里。请对所有的大写字母都放轻松。最后两个选项实际上没有什么问题,也许可以尝试使用双括号来安抚过梁while((isHeads=Math.random()>0.5))
如果您想明确地进行Math.random()<0.5
运算,那么do-while循环可能也可以工作。我希望能够知道循环中的值。所以,假设我想掷骰子,目标是不掷6,我想每次打印出值,你会怎么做?如果你的目标不同,你会写一个不同的函数,返回不同类型的值。“不掷6”将是roll()!=6
其中roll()
生成的值范围为1到6(包括1到6)。