Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当初始值设定项也是循环设定项时,如何保持循环干燥?_Javascript - Fatal编程技术网

Javascript 当初始值设定项也是循环设定项时,如何保持循环干燥?

Javascript 当初始值设定项也是循环设定项时,如何保持循环干燥?,javascript,Javascript,对于这种基本循环类型,我想不出一种方法来保持代码的可读性和干性(不要重复自己的代码),在这种循环类型中,初始化一个值,然后每次都做同样的事情,这让我很恼火。这种情况经常发生在读取文件之类的事情上。很明显,我可以重复初始值设定项,有时还可以将其清理成一个函数,但这让我很烦!我怎样才能做到干净呢 FOR循环 让员工人数=0; 为了( 让isHeads=Math.random()>0.5; isHeads; isHeads=Math.random()>0.5//重复 ) { 编制++; } 控制台日志

对于这种基本循环类型,我想不出一种方法来保持代码的可读性和干性(不要重复自己的代码),在这种循环类型中,初始化一个值,然后每次都做同样的事情,这让我很恼火。这种情况经常发生在读取文件之类的事情上。很明显,我可以重复初始值设定项,有时还可以将其清理成一个函数,但这让我很烦!我怎样才能做到干净呢

FOR循环

让员工人数=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)。