编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 调试
指数 -> 一般编程
转到页面 1, 2  下一页
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
马丁




邮政发布: 星期四07年10月12日上午12:00  帖子主题:调试

将此视为关于如何编写更好代码的建议。这将是一个持续的教程,更新了我的时间。
赞助
赞助
赞助
赞助
马丁




邮政发布: 星期四07年10月1日12:26 AM  帖子主题:(没有主题)

1.评论
评论对于编程至关重要。这有点讽刺,因为评论实际上并没有以任何方式影响代码。评论只是它听起来的样子;它是程序员的备注,或代码中的注释。

在大多数语言中,评论以两种方式之一标记:有单行注释,通常由“//”表示,并在“/ *”打开的注释并由“* /”关闭。而不是'//'表示单行评论,图灵使用'%'

现在,问题是:评论做了什么,这是如此有用,即它可以帮助我编写不会崩溃的程序?它告诉计算机忽略一行代码。以下是图灵计划中的评论的示例:

代码:
放"hello"
%此行被评估,并没有任何作用
var x...:INT%您可以将评论放在代码行结束
x := 5
评论签名后的一切(%)处理器忽略。
% 放"这条线实际上被评论出来了,而且不会被运行"
为我: 1 .. 5
 / *多行评论
     可以在评论中包装
       like these */
     put i
     % x := x + 1
结束


现在,快速测验:该程序结束时X的值是多少?正确答案为5,因为线索:= x + 1被评论出来。

好的,乏味的东西,现在在为什么评论是有用的。程序员使用评论留下自己或其他程序员在其代码中的说明。这可以是两个目的:代码部分令人困惑,并写出它用英语中的内容有助于让您更容易理解,或者只是使其简单地在代码中间开始,并知道什么是什么发生。对于您认为自己的程序员有多好,这无关紧要,评论的代码很好。现在,通过评论得了好评,我并不意味着过度评论。明显的线条是他们所做的不值得评论。如下:

无用
代码:
var x..:INT%这是一个整数

任何人都可以弄明白这个
好的
代码:
var x..:INT%存储绵羊的数量

更好,此评论很短,并究竟解释了变量的作用。

在以后的教程中将解释更多的评论用途。
WTD.




邮政发布: 星期四07年10月2日2:08 AM  帖子主题:(没有主题)

甚至更好,使用:

代码:
var numbumofsheep.: int


不需要评论。 微笑
短发




邮政发布: 2004年10月7日10:57 AM  帖子主题:(没有主题)

你宁愿每次键入x,或numberofsheep吗?


通过评论,您必须只编写一次,您获得HTE点acroos,

你的方式需要更多的努力,这是我将使用的唯一方法

var x,numberofsheep:int
numberofsheep:= x

很高兴 很高兴 很高兴

对不起,不得不在那里有点讽刺
马丁




邮政发布: 星期四07年10月7日上午11:08  帖子主题:(没有主题)

该死的人,即下一步。
马丁




邮政发布: 星期四07年10月7日11:26 AM  帖子主题:(没有主题)

2.预先发布条件
预先和后期条件只是评论的具体使用。函数的预先条件基本上是必须真实进入功能的陈述。函数的后期条件是出于函数的真实状态。

代码:
功能分裂(a, b : int) : real
   result a / b
结束鸿沟


所以现在我们必须在这个功能出错时问自己。答案是显然,当B = 0时,程序将崩溃并返回除以零错误。函数完成后会发生什么?它返回一个/ b。因此,我们将这些事实放在前后条件下:

代码:
功能分裂(a, b : int) : real
   %Pre: b is not equal to 0
   %Post:返回除以b
   result a / b
结束鸿沟


现在这个例子的问题是它非常明显。任何用来一周的人都可以看出这一点,并告诉你它所做了什么。你的函数越大,弄清楚它究竟是什么难以置信的。例如(在Java中,我不想翻译它):

代码:
//前:采取有序的曲线和富集
        //post:用行返回rowindices中的行,并且由Colindices编号的列,或null应该有rowindices有问题
       公共矩阵子矩阵(int [] rowindices,int [] colindices) {
               int subrows = rowindices.length;
               int子cols = colindices.length;

                if (rowIndices[0]<1 || rowIndices[0]>rows) {
                        System.out.println("行索引出界限\ n");
                        return null;
                }
                for(int i=1; i<subrows; i++)
                        if (rowIndices[i]<1 || rowIndices[i]>行|| rowindices [i]<=rowIndices[i-1]) {
                                System.out.println("行索引超出界限或无序\ n");
                                return null;
                        }

                if (colIndices[0]<1 || colIndices[0]>cols) {
                        System.out.println("列索引出界限\ n");
                        return null;
                }
                for(int i=1; i<subcols; i++)
                        if (colIndices[i]<1 || colIndices[i]>cols || Colindices [I]<=colIndices[i-1]) {
                                System.out.println("列索引界限或无序\ n");
                                return null;
                        }
                       
                Matrix b=new Matrix(subrows,subcols);
                for (int i=1; i<=subrows; i++)
                        for (int j=1; j<=subcols; j++)
                                b.set(i,j,get(Rowindices [I-1],Colindices [J-1]));
 
                return b;
        }


正如您所看到的,前后条件变得更有用。

接下来,我将在函数中解释错误检查
jhanson90.




邮政发布: 星期四07年10月1日下午1:42  帖子主题:(没有主题)

Shorthair写道:
你宁愿每次键入x,或numberofsheep吗?


通过评论,您必须只编写一次,您获得HTE点acroos,

你的方式需要更多的努力,这是我将使用的唯一方法

var x,numberofsheep:int
numberofsheep:= x

很高兴 很高兴 很高兴

对不起,不得不在那里有点讽刺


我宁愿使用'numberofsheep'变量。每当您认为您会忘记“X”时,而不是在评论中,您可以完全避免成本。我使用评论作为一种形式,解释程序如何工作以及我将与变量有关的方式,而不是那么多告诉你代码正在做的事情。
托尼




邮政发布: 星期四07年10月7日2:11 PM  帖子主题:(没有主题)

理想情况下,您应该能够查看一块代码,并能够解释它的作用而不参考您在其他地方写的评论。

虽然
代码:

A = F.(b);

写得很短,它根本没有描述性。如果代码中存在错误,有人试图弄清楚(所谓的腐败逻辑),他们必须向上滚动到变量声明,以了解A / B是什么,然后定位函数f以了解它的内容。如果您保持这种编码风格,您可以使用嵌套函数真正地将某人送到野生鹅窝上
代码:

x =苹果(oranges+dan)*table(pen(42-x));

任何想法上面的线条吗? 笑
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
赞助
赞助
赞助
赞助
Rizzix.




邮政发布: 星期四07年10月2日2:32 PM  帖子主题:(没有主题)

并避免这样做像这样的东西:
代码:

_ := __(___)
只是为了让你知道它完美有效的代码..但不要问我做什么 非难
WTD.




邮政发布: 星期四07,2004 6:38 PM  帖子主题:(没有主题)

Rizzix写道:
并避免这样做像这样的东西:
代码:

_ := __(___)
只是为了让你知道它完美有效的代码..但不要问我做什么 非难


如何将函数的结果分配给变量无用?
托尼




邮政发布: 星期四07年10月7日7:26 PM  帖子主题:(没有主题)

我不了解你的wtd,但imo, __() 不是一个非常描述的函数名称 笑
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
WTD.




邮政发布: 星期四07年10月7日7:31 PM  帖子主题:(没有主题)

啊。我以为他只是指基本模式。
马丁




邮政发布: 星期四07年10月7日晚上9:43  帖子主题:(没有主题)

人们,对我有点信心 眨眼
WTD.




邮政发布: 2004年10月9日星期六12:01 AM  帖子主题:(没有主题)

功能分解

呵呵?现在怎么办?

基本上,相当干燥的术语意味着将问题破坏了几个较小的问题,每个问题都有一个有意义的名称来指示正在发生的事情。

函数或程序是一个黑匣子。它需要某些数据并做某事。只要它正确地完成这些事情,我们就不特别关心它是如何完成的。

为什么这是重要的?

通过将程序突破到几个较小的问题中,我们最终比我们试图立即采取整个问题,更容易调试的小型,简单的问题。

调试每个较小的问题后,您可以在程序中自由使用它,而无需担心它包含的代码是问题的源头。

分手一个程序也大大提高了一个项目的两个或更多程序员之间的合作。您可以作为一支团队决定要使用的功能和程序以及它们应该如何行事,然后将它们分开并单独实施这些功能和程序。

最后...

创建函数和过程以处理程序中较小的问题意味着您将名称提供给常用的代码。你经常使用的代码而不是重新输入(或复制和粘贴)的代码,而不是重新输入(或复制和粘贴),而是只写一次代码。

如果您稍后再返回并希望更改该代码,则只需在一个地方执行它。替代方案是在几个地方改变代码,并希望您不会错过任何问题。
WTD.




邮政发布: 2004年10月9日星期六12:09  帖子主题:(没有主题)

当然,我以前的帖子的最后一点只是良好的做法。

如果您可以编写一次代码,那么只写一次。

坏的

代码:
如果foo = 42那么
   put "Something!"
   put foo * 2
别的
   put "Something!"
   put foo / 2
万一


好的

代码:
放"Something!"
如果foo = 42那么
   put foo * 2
别的
   put foo / 2
万一
从上一个显示帖子:   
   指数 -> 一般编程
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

12  [ 16 Posts ]
转到页面 1, 2  下一页
跳到:   


Style:  
搜索: