小编xob*_*vap的帖子

一个函数应该有多短?

我在这里做了一些搜索,没有发现任何类似的东西,所以我要继续问问.这实际上更多地是关于语义而不是实际的编程问题.我目前正在用C++编写一些东西,但语言并不重要.

我很清楚,保持你的功能/方法尽可能短是一种很好的编程习惯.然而,你怎么知道函数是否太长?或者,是否有可能将功能分解得太多?

我学到的第一种编程语言(除了Applesoft BASIC,不算......)是6502汇编语言,速度和优化就是一切.如果一些循环计数会搞砸整个程序的时间,通常最好直接设置内存位置或寄存器,而不是跳转到另一个子程序.前一种操作可能需要3到4个周期,而后者可能需要两到三次.

虽然我意识到现在如果我甚至向某些程序员提及循环计数,他们只是给我一个空白的外观,这是一个很难打破的习惯.

具体来说,让我们说(再次使用C++)我们有一个私有类方法,如下所示:

int Foo::do_stuff(int x) {
    this->x = x;
    // various other operations on x
    this->y = this->x;
}
Run Code Online (Sandbox Code Playgroud)

我已经看到一些论据,至少,每组操作都应该是它自己的功能.例如,do_stuff()理论上应该被命名为set_x(int x),应该为在类成员x上执行的操作集编写一个单独的函数,并且应该编写第三个函数来分配类成员的最终值. x到班级成员y.但我已经看到其他论点,即每个操作都应该有自己的功能.

对我来说,这似乎是错误的.我再一次从内部角度看问题; 每个方法调用都在推送堆栈上的地址,执行其操作,然后从子例程返回.对于相对简单的事情来说,这似乎是一个很大的开销.

对于这类事情是否有最佳实践,还是更多地取决于个人判断?

memory memory-management function semantics

6
推荐指数
2
解决办法
220
查看次数

html5 canvas - 宽度/高度是否需要内联定义?

我一直在搞乱HTML5/Javascript,发现了一些我不理解的东西.

我正在尝试编写一些用于处理HTML5画布的基本例程,并发现drawImage函数没有绘制任何东西.弄清楚它是我的代码,我使用了现有教程中的代码,即HTML5 Canvas Image Tutorial.当我在外部包含Javascript代码(即作为单独的文件)时,我仍然没有看到我的图像被绘制到画布上.

从那里,我复制完整的源代码,在这里找到,逐字逐句,它确实有效.我开始搞乱弄清楚为什么这样有效,但我没有.

我发现不同之处在于逐字代码定义了画布内联的宽度和高度.我更喜欢将样式从HTML和CSS中分离出来.如果我做了以下代码:

<canvas id = "myCanvas" width = "600" height = "400"></canvas>
Run Code Online (Sandbox Code Playgroud)

但如果我在外部CSS样式表中定义画布宽度和高度,则无效.

我确定我的一个问题是我在Javascript文件之后包含了样式表; 在这之前,我的图像根本没有出现,即使在通过alert()函数确认图像onload处理程序中的代码被触发之后也是如此.在更改了包含文件的顺序后,我的图像确实出现了,但是很奇怪地缩放了,好像忽略了CSS样式.

为什么是这样?我是否遗漏了有关通过CSS定义画布属性的顺序?为什么Javascript在这种情况下会忽略CSS样式?如果它完全相关,我已经在Chrome和Firefox的最新版本中尝试了这一点.

javascript html5 canvas

4
推荐指数
1
解决办法
2988
查看次数