本手册描述了Nice编程语言。它目前正在修订之中,这意味着这门语言在许多方面还不完整,或有些部分基本上还是空白。在此期间,建议同时阅读《Nice Tutorial》[http://nice.sf.net/language.html],该书包括了许多额外信息。阅读这两篇文档需要一些Java的知识,或至少了解一种面向对象语言。

本手册的作者是Daniel Bonniot和Bryn Keller,Francis Barber也参与其中。

 

第一章 基本原理

A language that doesn't affect the way you think about programming, is not worth knowing.

—Alan J. Perlis

The art of progress is to preserve order amid change and to preserve change amid order.

—Alfred North Whitehead

Nice语言是一门新的基于Java的面向对象语言。它从函数型语言借鉴了一些特性,并艺术性地将学院派的研究成果付诸实践。而这些特性使它有更好的表达力(expressivity)、模块化结构(modularity)和安全性(safety)。

安全性

Nice在编译时能够比现有的面向对象语言检查出更多的错误(空指针访问(null pointer accesses),类型转换异常(cast exceptions))。这意味着使用Nice编写的程序将不再抛出声名狼藉的NullPointerException和ClassCastException。这方面的详细信息可参阅http://nice.sf.net/safety.html。

模块化结构

在面向对象语言中,能够向已存在的类继承结构中加入一个新类。在Nice中,还可以在不修改源文件的情况下向已有类添加新方法,而这是多元方法(multi-methods)的一种特殊情况。

表达力

使用Nice的高级特性可以避免许多重复的编程任务。你是否曾经厌恶过编写成堆的循环、类型转换、使用默认值的重载方法……?

 

第二章 包

包是一组相关联的类、方法和变量。你可以用下面的语句在一个.nice文件中声明一个包下所有的代码:

package package-name;

可以使用import语句将另一个包中的所有公有元素导入:

import package-name;

请注意这一点与Java稍微有些区别。在Java中可以独立地导入一个包中的类。在Nice中方法可以在类之外声明,所以必须导入整个包以确定一个类中的可用方法。这点意味着Nice项目必须以比Java更小的、完整的包进行设计。

如上所述,只有整个包能被导入,而单个类却不行。同样,在包名后不需要像Java中那样使用.。事实上,使用.说明你是想导入一个Java包而不是Nice包。详情请参阅“与Java交互”一部分。

 

main方法

在包中包含了一个方法,它的名字为main,返回值是void,并接受一个String[]类型的参数。这个方法很特殊,它所在的程序将由这个main方法开始执行。运行时系统将把命令行参数传给main方法。

请注意,由于Nice中主要的代码单元是包而不是类,因此main方法必须在任何类以外实现。