语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。

也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。通常来说,使用语法糖能够增加程序的可读性,减少程序代码出错的机会。

语法糖方便了程序员的开发,提高了开发效率,提升了语法的严谨也减少了编码出错误的几率。我们不仅仅在平时的编码中依赖语法糖,更要看清语法糖背后程序代码的真实结构,这样才能更好的利用它们。

我想语法糖和其他编程思想一样重要,什么duck type,人本接口,最小接口,约定优于配置,其实不都是一些思想上的“语法糖“?

不过也并不是没有反对的声音,这其中就有图灵奖的第一个获得者: Alan Perlis。.net从2.0到3.0到3.5底层CLR并没有做更新,没有添加任何新的IL指令,所以C#从2.0到3.0中所有的特性都是语法糖,就算从1.0到2.0,也只有一个泛型不是语法糖,其余的新特性也都是如此,但是每一次C#发布新特性的时候我们不得不为之而鼓舞,为之而喝彩。新的语法可以酿造更好的编程风格,以前一些难以实现的方面现在也轻而易举了。
需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。

http://baike.haosou.com/doc/1355052.html

8.断言语句//运行时需要加上 VM参数 -ea public static void main(String[] args) {

String str = "fans2";

boolean flag = "fans".equals(str);

assert (flag);

}//程序结果Exception in thread "main" java.lang.AssertionError

at JavaTenSugar.main(JavaTenSugar.java:102)

9.对枚举的switch支持 // 对枚举和字符串的switch支持

package switch_;

public class SwitchSelector {

    public static void main(String[] args) {
char str='c';
switch (str) {
case 'c':
System.out.println(str);
break; default:
break;
}
} }

http://blog.sina.com.cn/s/blog_a34e3f14010140l5.html

循环历遍(foreach)

List<Integer> list = new ArrayList<Integer>();
for(Integer num : list){
System.out.println(num);
}

Foreach要求被历遍的对象要实现Iterable接口,由此可想而知,foreach迭代也是调用底层的迭代器实现的。反编译上面源码的字节码:

List list = new ArrayList();
Integer num;
Integer num;
for (Iterator iterator = list.iterator(); iterator.hasNext(); System.out.println(num)){
num = (Integer) iterator.next();
}

枚举
       枚举类型其实并不复杂,在JVM字节码文件结构中,并没有“枚举”这个类型。
       其实源程序的枚举类型,会在编译期被编译成一个普通了类。利用继承和反射,这是完全可以做到的。
       看下面一个枚举类:

public enum EnumTest {
OLIVER,LEE;
}

反编译字节码后:

public final class EnumTest extends Enum {

    private EnumTest(String s, int i) {
super(s, i);
} public static EnumTest[] values() {
EnumTest aenumtest[];
int i;
EnumTest aenumtest1[];
System.arraycopy(aenumtest = ENUM$VALUES, 0,
aenumtest1 = new EnumTest[i = aenumtest.length], 0, i);
return aenumtest1;
} public static EnumTest valueOf(String s) {
return (EnumTest) Enum.valueOf(EnumTest, s);
} public static final EnumTest OLIVER;
public static final EnumTest LEE;
private static final EnumTest ENUM$VALUES[]; static {
OLIVER = new EnumTest("OLIVER", 0);
LEE = new EnumTest("LEE", 1);
ENUM$VALUES = (new EnumTest[] { OLIVER, LEE });
}
}

http://blog.csdn.net/ol_beta/article/details/6787234

最新文章

  1. 预处理命令[#define]说明
  2. Xmemcached的FAQ和性能调整建议
  3. Cordova+ionic 开发hybird App --- 开发环境搭建
  4. Tarjan算法---强联通分量
  5. HTML页面嵌入视频和JS控制切换视频的问题
  6. 【原创】No matching distribution found for Twisted&gt;=10.0.0 (from scrapy)
  7. Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
  8. awk用法小结(作者总结)
  9. Dynamices CRM JS 类库 神器 XrmServiceToolkit - A Microsoft Dynamics CRM 2011 &amp; CRM 2013 JavaScript Library
  10. 《python基础教程》笔记之 基础知识
  11. JS树型菜单
  12. Javascript教程
  13. [09] 监听器 Listener
  14. 高性能、高可用、高扩展ERP系统架构设计
  15. maven学习pom
  16. 【AGC014E】Blue and Red Tree
  17. Spark Client启动原理探索
  18. linux中的信号机制
  19. java-方法重写的注意事项
  20. powerDesigner 把name项添加到注释(comment)

热门文章

  1. Test class should have exactly one public zero-argument constructor
  2. BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
  3. 数据结构——链表(linkedlist)
  4. 在Update Panel 控件里面添加 File Upload 控件 上传文件
  5. Activity中Menu相关的几个方法的调用时机
  6. 在CentOS/RHEL/Scientific Linux 6下安装 LAMP
  7. ssh &quot;openssh-daemon is stopped&quot;操作之伤+sftp访问“-bash: /dev/null: Permission denied”
  8. 我的Python成长之路---第三天---Python基础(11)---2016年1月16日(雾霾)
  9. ZOJ 3872 Beauty of Array DP 15年浙江省赛D题
  10. POJ 2208 Pyramids 欧拉四面体