对于一般编程任务来说,保证基本类型(如int等)实际是值拷贝一般就足够我们编码抽象了,不过还有一些情况下,除了基本的值类型外,也希望每次变量传递,都能获得值拷贝的效果。如以下伪代码
首先我们看下要实现的效果
<pre>
start = new Point(1, 2);
end = new Point(3, 4);
line1 = Line(start, end);
line2 = Line(start, end);
line1.move(1, 1);
line2.move(2, 2);
</pre>
我们看下值类型的抽象方式
<pre>
struct Point { //struct是值类型
int x, y;
public move (off_x, off_y) {
x += off_x;
y += off_y;
}
}
class Line {
private Point start;
private Point end;
public move(int off_x, int off_y) {
start.move(off_x, off_y);
end.move(off_x, off_y);
}
}
</pre>
现在看看引用类型的抽象方式
<pre>
class Point { //class是引用类型,而Point经常作为一个整体变化,所以这里不提供修改功能
int x, y;
public move (off_x, off_y) {
return new Point(x + off_x, y + off_y);
}
}
class Line {
private Point start;
private Point end;
public move(int off_x, int off_y) {
start = start.move(off_x, off_y);
end = end.move(off_x, off_y);
}
}
</pre>
具体哪种更好了,本来如果按照我的思维,自然是struct更好,因为它具有更好的性能,更低的内存开销。不过看了王总的《Swift 语言的设计错误》后感觉struct在设计上确实增加了心智负担。不过具体问题具体看吧,根据实际情况来。
网友评论