简单的this,麻烦的this

作者:网友投稿 时间:2018-08-31 16:27

字号
9月15日技术沙龙 | 如何将智能化和运维工作相结合,实现智能运维

周末的Hello World咖啡馆总是热闹非凡。

Java , Python, Ruby, JavaScript围坐在一起,一边喝咖啡,一边海阔天空。  

C老头儿则待在一旁,冷眼旁观。

聊着聊着,这话题不知怎么着转移到了“this”上来了。

Java 说: “唉!你们不知道吧,对于一个初学Java的人来说,this 是非常难于理解的。”

Python说:“this 在你那里已经够简单了啊。还难于理解?”

“我们都是支持面向对象编程的,在我这里,this 可以用到实例方法或者构造器中,表示对当前对象实例的引用。”

public class Point { 

    private double x = 0.0; 

    private double y = 0.0; 

    public Point(int x, int y) { 

        this.x = x; 

        this.y = y; 

    } 

 

   public double distanceTo(Point that) { 

        double dx = this.x - that.x; 

        double dy = this.y - that.y; 

        return Math.sqrt(dx*dx + dy*dy); 

    } 

“这不很容易理解吗? ” Ruby 问道。

“对于第一次接触面向对象编程的人来说,他分不清这个当前对象this到底是哪个对象。”  Java说,“我必须得再写一段代码给他掰扯一下。”

Point p1 = new Point(1,1); 

Point p2 = new Point(2,2); 

 

// this 指向的是p1 

p1.distanceTo(p2);   

 

// this 指向的是p2 

p2.distanceTo(p1);   

“对啊,this必须得有个上下文才能准确理解。” Python说,“还有,你那个this吧,是个隐式的,像我是显式的:”

class Point: 

    def __init__(this, x, y): 

        this.x = x 

        this.y = y 

    def distanceTo(this,point): 

        dx = this.x - point.x 

        dy = this.y - point.y 

        return math.sqrt(dx**2+dy**2) 

Java 说:“你不是一直用self吗,怎么现在是this?”

Python笑道:“我这不是为了和你Java老弟保持一致嘛,反正只是个变量名,你想用this就用this,想用that就用that,只不过我们习惯于用self 。”

Ruby说: “Python兄,你把this放到方法中作为一个参数,实在是太丑陋了,一点美感都没有。”

“那是我们的哲学,我们信奉 Explicit is better than implicit。”

“可是在调用的时候,怎么不把一个对象传给那个方法?你的self去哪里了?”

p1 = Point(1,1) 

p2 = Point(2,2) 

 

p1.distanceTo(p2) 

p2.distanceTo(p1) 

“你怎么不写成: distanceTo(p1,p2) ?”

“那不行,” Python说,“如果那样的话我们就不是面向对象了,而面向过程了。 ”

“哼哼,” C老头儿在一旁冷笑一声,“说来说去,还不是披了一层面向对象的外衣,内部实现依然是面向过程的?!”

“此话怎讲?” Java一直以正统的面向对象自居,不像Python, Ruby ,Java即使是想输出一个Hello World也得定义一个类不可。

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>Java Python Ruby
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接