zoukankan      html  css  js  c++  java
  • 语法糖(Syntactic sugar)

    语法糖(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

  • 相关阅读:
    iOS开发---iPhone SDK 包含哪些东西?
    COS-8文件系统
    COS-7设备管理
    COS-6主存管理
    COS-5资源分配与调度
    COS-4进程及进程管理
    饭卡管理系统学生E-R图
    COS-3OS的用户接口
    COS-2OS结构和硬件支持
    计算机操作系统-1绪论
  • 原文地址:https://www.cnblogs.com/softidea/p/4206744.html
Copyright © 2011-2022 走看看