And the fourth thing to notice is, I've used abstraction. I've said nothing about how I'm going to make square root.
第四件事情就是,我运用了抽象,我对怎么去求平方根没有提及。
I'm selling tickets to a comedy show at the Times Square Art Center,
我在时代广场的艺术中心卖喜剧表演的门票,
Well, I'm going to get back, let's just draw a bigger square than usual that's roughly four times the size.
嗯,返回的是,我画一个更大的方形,大致上是4倍的大小。
Let's call x the thing I'm trying to find the square root of. Let's start at 1. Square it.
让我们把求平方根的对象,这个数称为x,让我们从1开始。
In Union Square, I'm not exactly sure.
联合广场周围,不太好说。
Then if I'm looking for the square root of something less than 1, I know it will be in my region, right?
如果我要求平方根的数小于,我就知道我们的答案应该,在0-1这个区间了,对不对?
It looks like a square because it's 32 bits I'm told.
它就像一个正方形,因为我说过它是32位。
Computing square root. I'm going to capture it in a piece of code, I'm going to be able to refer to it by a name, and I'm going to suppress the details, meaning inside of that computation, you don't need to know what it does. You just need to know, if I give it the right kind of input, it'll give me back an input that satisfies the contract that I set up.
比如计算平方根,我会用一段代码来说明,我将给它命名,并且忽略细节,意思就是在这一段计算过程中,你不用知道它做了什么,你只需知道,如果我进行了正确的输入,它将会给我符合条件的输出。
I'm given an integer that's a perfect square, and I want to write a little piece of code that's going to find the square root of it. All right so I'm cheating a little, I know it's a perfect square, somebody's given it to me, we'll come back in a second to generalizing it, so what would the steps be that I'd use to walk through it?
完美平方数的整数,我想写一段代码来求这个数的平方根,好,我这儿有点儿作弊了,我知道这是一个完美的平方数了,他们给我的,我们后面会讲怎么产生这个数的,那么我想解决这个问题,需要什么步骤呢?
I'm using it as an abstraction, saying I'm going to have square root from somewhere, maybe I'll build it myself, maybe somebody gives it to me a s part of a library, so I'm burying the details inside of it.
我把这个方法作为一个抽象来引用,意味着我将会从另外一个,地方去求一个数的平方根,可能我会自己写这个方法,也可能我会从别人写的lib中去引用,因此我将实现的细节放到了其他地方。
to do sqrt, or square root-- no, I'm going to square root use sqrt, that's the name I'm using here-- square root a hundred different places in some piece of code. Without function, I'd have to copy that piece of code everywhere.
让我做一下准备,想象一下我要调用sqrt或者-,不,我会调用sqrt函数,这是我在这里用的名字,我得把这段代码到处复制。
Well, int is almost always 32 bits at least so far as we've seen so, in fact, any time I draw a pointer hence force I'm just going to draw a square as well because they are, in fact, the same size usually in memory.
嗯,int几乎总是32位的,至少我们至今所看到的是这样的,每次我用一个正方形表示一个指针,因为实际上他们,在内存中的大小是一样的。
y A square it's called X, another square it's called y and now this time I'm doing pointers to int not points to char.
一个叫做x,另外一个叫做,这一次是int型指针,不是char型指针。
I wanted to show you that, so, first thing I'm going to do is say, all right, I know I'm going to need square root in here, so I'm going to, in fact, import math.
我们可以开始完成这个方法了,我想让你们看到完成这个方法的过程,第一件事情就是,我们在这儿需要一个求平方根的方法,实际上我将引入math包。
Well I'm relying on the contract, if you like, that the manufacturer of square root put together, which is, if I know I'm giving it two floats, which I do because I make sure they're floats, the contract, if you like, of square root says I'll give you back a float.
好吧我能靠一些类似合约来保证,如果这么说你喜欢的话,其实就是当求平方根的方法,获得了两个我已经确认了是浮点数的数后,这个类似合约的东西就会保证,返回一个浮点数。
Look, part of the reason I'm flaming at you is, something like square root, it seems dumb to write specs on it. Everybody knows what this is going to do. But you want to get into that discipline of good hygiene, good style.
也是非常重要的,我在这里说的,一些理由就是像平方根,为它写规范听上去很傻,每个人都知道它是干什么的。
OK, once it gets to the end of that, what's it going to do? It's going to come down here and, oh. What's that doing? Well I cheated when I started. I said, somebody's giving me a perfect square, I'm looking for the square root of it. But suppose 15 I gave this thing 15, and asked it to run.
好,一旦到了循环的最后,程序会去做什么?程序会跳到这里来,噢,这是干什么的?好吧,当我开始的时候我有点小作弊的意思,我说过,我得到了一个完美的平方数,我要求这个数的平方根,但是假设下我得到的数是。
应用推荐