初学者的编码效率:编写可重用的代码

我要告诉你一个秘密。你必须承诺你不会与任何人分享。好?在这里它是...最好的程序员编写最少量的代码。听起来有点反直觉不是吗?但事实并非如此。现在,一位经验丰富的编码员可能正在编写3D引擎,这显然比编写菜单的人要多得多。我得到的是,如果初级和高级开发人员都解决了同样的问题,那么高级开发人员就会编写更少的代码。原因是高级开发人员已经学会了如何变得懒惰。他们已经学会了如何有效地编码以及如何利用旧代码进行重用。在本文中,我将与您分享我多年来提到的一些提示和技巧。

并非每一行代码都是唯一的

编码领域有一个共同的口头禅。编写可重用的代码。你可以在招聘广告,教程,编码文章(比如这篇文章)上看到它......等等。这是有充分理由的。你可以重用的越多,你每次都要写的越少。这节省了时间和金钱,这总是一件好事。然而,对于所有这些关于确保代码可重用的讨论,对于新编码器而言,它实际上可能是一个难以理解的概念。没有经验的编码员通常会采取两种方式之一。要么他们看看他们的代码并且认为他们所做的一切都是一次性的,并且不会再需要它们,或者他们会过度使用并尝试使所有东西都可以重复使用。这是我们首先要解决的第一个场景。

查看大量代码非常容易,并且对自己说“哦,这段代码是独一无二的,我再也不需要再使用它了”,你可能是对的。然而,懒惰的诀窍是将代码分解成更小的块然后再看一遍。寻找看似简单的小事情,但这些事情是需要一直做的事情。也许他们只需要一两行代码,但这些小东西会随着时间的推移而增加。

Flash中始终存在的一个问题是确保文本在整个像素上。如果你的文本域不是整个像素,然后文本将无法正确呈现。

myTextField.x = 12; //而不是myTextField.x = 12.2;

要解决此问题,您可以这样写:

MyTextField.x = Int(12.7);

非常简单,除非您每次要放置文本时都将值转换为整数。

可重用的方法是为您创建一个基类的TextField并在每次需要一些文本时使用它。

public class WholePixelText扩展TextField {public function WholePixelText(){super(); public override function set x(value:Number):void {super.x = int(value);公共覆盖函数集y(值:Number):void {super.y = int(value); }}

而不是去新的文本域();你会说新的WholePixelText();然后再也不用担心你的文字可能是半像素。无论我们将x和y属性设置为什么,它们总是被覆盖到整数。我们刚刚节省了无数秒钟和键入的键击INT(XVAL)一遍又一遍地。不仅如此,我们还通过确保正确完成文本来消除失败点。

减少写入代码量的另一种方法是保存重要的功能。数学函数是我一直难以记忆的东西,所以我养成了最近保存重要方法的习惯。例如,您需要在两个整数之间需要多少次随机数?

你可以试着记住这个:

var myRand:int = Math.random()*(max-min)+ min;

或者你可以写一次,然后添加一个包含这个的静态Utils类:

public static function randomInt(min:int = 0,max:int = 1):int {return Math.random()*(max-min)+ min; } //然后下次你需要一个随机的int //这就是你需要记住的全部内容:var myRand:int = Utils.randomInt(min,max);

您还可以包含用于获取两点之间的角度或将度数转换为弧度然后再返回的函数。这些是你会发现自己一遍又一遍地使用的重要功能。无需每次都从头开始编写它们。拥抱懒惰,写一次。到处使用。

能够以图形方式识别事物看起来非常不同的地方也很重要,但实际上共享许多相同的底层代码。一个很好的例子是按钮。按钮可能看起来非常不同,但在深处它们都有一些共同的元素。它们都有击中区域和翻滚效果。处理此问题的一种好方法是为您使用的所有按钮编写公共基类。这样您就可以消除与创建按钮相关的一些重复性任务。

这是一个基本按钮基类的示例:

公共类ButtonBase扩展Sprite {public function ButtonBase(){setupHit(); this.buttonMode = TRUE; this.mouseEnabled = TRUE; this.mouseChildren = FALSE; this.addEventListener(MouseEvent.ROLL_OVER,onOver,false,0,true); this.addEventListener(MouseEvent.ROLL_OUT,onOut,false,0,true); } protected function setupHit():void {this.graphics.clear(); this.graphics.beginFill(0xffffff,0); this.graphics.drawRect(0,0,this.width,this.height); this.graphics.endFill(); } protected function onOver(e:Event):void {} protected function onOut(e:Event):void {}}

然后根据您的特定按钮自定义它,您只需覆盖OnOverOnOut用于创建自己的效果。这节省了大量时间,因为您不必担心命中区域,确保ButtonMode已启用或添加侦听器以进行翻转。

Assortment buttons that all look different but they all use this same common code base

所有看起来不同的分类按钮,但它们都使用相同的公共代码库

不要让一切都可以重复使用

我之前提到过的另一个错误是许多程序员所做的就是尝试将他们所做的一切都重复使用。从理论上讲,这是一个好主意,但实际上你最终可以做的工作比你刚从头开始编写时更符合我们的懒惰理想。

这种情况发生的一个很好的例子是代码滚动条。滚动条有各种形状和大小。尝试编写可以一次又一次重复使用的滚动条的代码是有意义的。滚动条陷阱来自于尝试制作太多或太难使用的滚动条。大多数滚动条是垂直或水平的。我的猜测是,所有滚动条中有98%用于这两种配置中的一种,并且倾向于垂直倾斜。然而,当编写这样的代码时,某些人的诱惑就是制作一个可以在任何角度使用的滚动条,无论是90,180还是127. 90和180都不是脑子,但花几个小时真的没有意义/天编码将很少使用的东西。

我们努力做的懒惰编码器永远不会这样做。懒惰的编码器不担心疯狂的边缘情况。他们为绝大多数案件编码,并担心他们来的时候会有一次。

希望通过这些提示和想法,您可以开始思考懒惰的方式。保存这些击键,并通过编写额外的代码来减少浪费宝贵的时间。记住所有这些事情,你也可以成为The Lazy Coder。



翻译字数超限