是否有一种类似代数的工具可以将你的代码简化为高效的代码

Is there an algebraic like tool that can reduce your code down to something efficient?

本文关键字:代码 高效 工具 种类 是否      更新时间:2023-09-26

例如,我正在进行http://eloquentjavascript.net's练习,其中一个教程是创建输出:

 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 
 # # # #
# # # # 

给出的答案是:

var size = 8;
var board = "";
for (var y = 0; y < size; y++) {
  for (var x = 0; x < size; x++) {
    if ((x + y) % 2 == 0)
      board += " ";
    else
      board += "#";
  }
  board += "'n";
}
console.log(board);

我的回答是:

var tile = "#";
var piece = "";
var switche = false;
var columns = prompt("enter number of columns","");
var rows = prompt("enter number of rows","");
var lastPiece = "blank";
for (var x = 0; x < columns; x++)
{
    if (lastPiece == "#") 
    {
        piece += tile;
        lastPiece = "blank";
    }
    else if (lastPiece == "blank") 
    {
        piece += " ";
        lastPiece = "#";
    }
 var row1 = piece; 
}
var lastPiece = "#";
var piece = "";
for (var x = 0; x < columns; x++) 
{
    if (lastPiece == "#") 
    {
        piece += tile;
        lastPiece = "blank";
    }
    else if (lastPiece == "blank") 
    {
        piece += " ";
        lastPiece = "#";
    }
var row2 = piece;
}
for (var i = 1; i <= rows; i++) 
{
if (!switche){
    document.write('&nbsp;'+ row1 + '<br>');
    switche = true;}
    else if(switche){
    document.write('&nbsp;' + row2 + '<br>');
    switche = false;}
}

我没有经验,但我已经可以看到,将来会有很多我写不必要的代码。是否有一些好的方法或工具来防止这种情况?

(Un?)幸运的是,没有工具可以优化一些任意的JS代码,你的大脑是你真正需要的(正如Greg Hewgill已经说过的)。

作为一个挑剔的选择,下面是一个代码,它应该比你练习中给出的答案更有效。

var line = ' # # # #',
    n,
    str = '';
for (n = 0; n < 8; n++) {
     str += ((n % 2 === 0) ? line : line.trim()) + ''n';
}
console.log(str); // Could be also put as element.innerHTML when replacing 'n with <br> and replacing the leading space in line with &nbsp;

我想这取决于你所说的高效是什么意思。很明显,打印输出是"最快的",你可以这样做:

console.log (" # # # #' n # # # # # # # # ' n ' n ' n # # # # # # # # # # # # ' n ' n ' n # # # # # # # # # # # # ' n ' n ' n # # # # # # # # # # # # ' n ' n ' n # # # # # # # # # # # # ' n ' n # # # #")//不会打这个速度。

但是,您可以选择使用另一种表示效率的含义:程序占用了多少空间。理想情况下,我们希望它比输出占用更少的空间。上面的程序虽然非常快,但比输出多占用了13个字符(那么为什么不直接存储输出呢?)如果我们稍微调整一下:

a=" # # # #'n# # # #'n";console.log([…]. join ()

现在,我们已经从原始输出大小中节省了整整16个字符。当然,这比我们最初的"只打印答案"的解决方案要慢。

对于一台计算机来说,总是能够找出我们的最佳解决方案是"非常困难的"。但是,计算机有时可以将其优化到这一点,并且不需要更改实际代码(在底层)。