返回信息流从前有一个伐木工,用一把普通的锯在锯树。他的朋友看他有那么多棵树要锯,于是给了它一把手提式链锯,对他说:这把锯非常强大,用它,你只要一天就能把这些树锯完。
第二天,朋友又来看这个伐木工,看他扛着链锯,哼哧哼哧地,像使用普通锯一样,手动地来回锯树。朋友看着干着急,说:“哥们儿,这是链锯啊!你看,你拉一下这根绳子,“轰”的一声,发动机就启动了,链锯自己会转。”那伐木工说:“习惯了……”
=====
从前有一个Windows程序员,他很讨厌打字,但是C语言程序太麻烦了,你必须定义每个变量的类型。
char *strName = "Peter";
int nAge = 42;
double dSalary = 5000.0;
void *lpObj = &some_object;
他的朋友说:现在C语言有auto关键字了,可以自动推导变量的类型。这个程序员听罢,高兴地回去改代码。第二天,朋友看到他的代码变成这样了:
auto lpszName = "Peter";
auto nAge = 42;
auto dSalary = 5000.0;
auto lpObj = &some_object;
朋友看着干着急:你都用auto关键字了,怎么还用匈牙利命名法?变量名叫name, age, salary, obj多好?那程序员说:习惯了……
====
从前有一个C++程序员,他很讨厌内存管理,因为在C++里必须手动管理内存,否则经常有内存泄漏什么的。
class CPerson {
char* m_name;
int m_age;
double m_salary;
Obj* m_obj;
public:
CPerson();
virtual ~CPerson();
}
CPerson::CPerson() {
...
m_name = new char[256];
m_obj = new Obj();
}
CPerson::~CPerson() {
delete[] m_name;
delete m_obj;
}
他的老板说:我们用Java吧,有垃圾回收。你有C++的基础,给你一星期时间学学吧。那个程序员很高兴地开始学Java。第二天,老板看到他写了如下代码:
public class CPerson {
private char[] m_name;
private int m_age;
private double m_salary;
private Obj m_obj;
public CPerson() {
...
m_name = new char[256];
m_obj = new Obj();
}
@Override
public void Finalize() {
m_name = null;
m_obj = null;
}
}
老板看了干着急,对他说:你知道Java的类名不需要像MFC那样加上C前缀吗?你知道Java的成员变量不需要加上m_前缀吗?你知道Java有String类型,比char[]好用得多吗?你知道Java会自动回收垃圾,而Finalize的效率非常低吗?那个程序员说:习惯了……
=====
有一个Java程序员很讨厌Java的啰嗦。定义一个属性还要像JavaBean那样创建getter和setter。
public class Person {
private String name;
private int age;
private double salary;
private static final double INITIAL_SALARY = 5000.0;
public Person(String name, int age, double salary) {
this.name = name; this.age = age; this.salary = salary;
}
public Person(String name, int age) {
this(name, age, INITIAL_SALARY);
}
public String getName() { return name; }
public int getAge() { return age; }
public double getSalary() { return salary; }
public void setSalary(double newSalary) { this.salary = newSalary; }
}
老板说:用Scala吧。和Java无缝集成,而且简练得多。你有Java的基础,给你两个星期学一学吧。第二天老板看到了他写这样的代码:
object Person {
private val INITIAL_SALARY: Double = 5000.0;
}
class Person {
private var name: String = _;
private var age: Int = _;
private var salary: Double = _;
this(name: String, age: Int, salary: Double) {
this.name = name; this.age = age; this.salary = salary;
}
this(name: String, age: Int) {
this(name, age, Person.INITIAL_SALARY);
}
def getName(): String = { return name; }
def getAge(): Int = { return age; }
def getSalary(): Double = { return salary; }
def setSalary(newSalary: Double): Unit = { this.salary = newSalary; }
}
老板看了干着急,说:你知道Scala不需要加分号吗?你知道Scala有primary constructor吗?你知道所有val成员都会自动生成getter,所有var成员都可以自动生成setter吗?你的程序完全可以像下面那样写你造吗?就一行你造吗?
class Person(val name: String, val age: Int, var salary: Double = 5000.0)
那程序员说:酱紫啊,我习惯了……
这是一条镜像帖。来源:北邮人论坛 / joke / #696463同步于 2015/1/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Joke机器人发帖
[码农向]从前有一个伐木工……
nuanyangyang
2015/1/29镜像同步42 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复