入门训练圆的面积_入门

入门训练圆的面积

CoffeeScript编程语言建立在JavaScript之上,并且可以编译成高效JavaScript,您可以在网络浏览器中运行它,也可以将Node.js等技术用于服务器应用程序。 编译通常很简单,并且生成JavaScript与许多最佳实践一致。 在本文中,了解CoffeeScript编程语言的功能。 安装CoffeeScript并运行编译器后,将在网页中使用CoffeeScript演示一个简单的示例。

下载本文中使用的源代码。

CoffeeScript的吸引力

很容易争辩说JavaScript是当今最重要的编程语言。 它是浏览器的语言,在桌面和移动应用程序中越来越多地使用。 随着Node.js的日益普及,JavaScript已成为服务器和系统应用程序的可行选择。 一些开发人员强烈地抵制JavaScript,主要是因为它的语法不一致和怪异的实现。 但是,随着JavaScript虚拟机的标准化程度提高,怪异的实现方式也逐渐消失。 JavaScript的下一个改进可能会在某种程度上解决语法不一致的问题:ECMAScript.next,这是一个受CoffeeScript严重影响的新兴标准。 但是,在流行的虚拟机同意并实施新标准之前,JavaScript语法仍有很大的改进空间。

如果您正在为JavaScript运行时编写程序,那么CoffeeScript是一个诱人的选项。 从语法的角度来看,JavaScript确实是个大杂烩。 它具有函数式编程语言的许多功能,尤其受Scheme的影响很大。 但是,Scheme是基于s表达式的非常简单的语法。 JavaScript共享Scheme中的许多概念,但不共享其语法。 相反,JavaScript具有类似于C的语法。 结果是一种语言具有功能概念,但是冗长的语法没有表达这些概念的自然构造。 例如,JavaScript允许使用高阶函数,例如其输入参数包括其他函数的函数。 这既有用又强大,并且是许多语言所缺少的功能。 但是,JavaScript的语法可能不太优雅,如清单1所示。

清单1.丑陋JavaScript
pmb.requestPaymentInfo('type', function(info){
    $('result').innerHTML = info.name;
});

该示例中有很多样板文件—括号,逗号,花括号,分号和语言关键字并不是真正必要的。

JavaScript的主要用途是作为客户端Web应用程序语言。 桌面和移动应用程序框架(例如Cocoa,Windows®Forms和Android)都是面向对象的。 面向对象的范例并非对所有事物都适用,但它非常适合具有图形用户界面的应用程序。 JavaScript还是一种具有继承性的面向对象语言,但它是原型,而不是像大多数应用程序框架使用的基于类的语言。 因此,JavaScript中的应用程序编程可能非常麻烦。

CoffeeScript解决了JavaScript的难点。 CoffeeScript:

  • 提供更简单的语法来减少样板,例如括号和逗号
  • 使用空格作为组织代码块的方式
  • 提供用于表达功能的简单语法
  • 提供基于类的继承(这是可选的,但在进行应用程序开发时可能非常有用)

您可能会推测,与JavaScript相比,使用抽象语法的CoffeeScript可能会有一些缺点。 例如,CoffeeScript是否比JavaScript慢得多,还是需要大量的运行时库? 实际上,CoffeeScript可编译为干净,高效JavaScript。 您始终可以确切看到它正在编译的内容,因此您可以确信不会引入过多的内容。 而且,由于CoffeeScript可以编译为功能齐全JavaScript,因此不需要任何类型的运行时库。 CoffeeScript提供了一种语法,可让您以最小的运行时开销充分利用JavaScript的功能。

先决条件

如前所述,您可以使用CoffeeScript编写在Node.js之上运行的服务器和系统应用程序。 但是,CoffeeScript和Node.js之间的关系更加深入。 要安装CoffeeScript,您需要先安装Node.js,因为:

  • CoffeeScript使用节点的程序包管理器NPM作为Node.js程序包分发。
  • CoffeeScript必须被编译。 它的编译器实际上是用CoffeeScript编写的,因此需要JavaScript运行时来进行编译。 Node.js核心的V8 JavaScript虚拟机非常适合该任务。

要遵循本文中的示例,您需要安装Node.js。

安装

您是否曾经希望可以从命令行运行JavaScript? 我还没有,但是CoffeeScript可能会改变它。 使用Node.js,您可以从命令行运行JavaScript,也可以将其作为可执行脚本的一部分运行。 Node.js的这一关键功能允许在命令行上执行CoffeeScript代码,从而提供CoffeeScript编译器(用CoffeeScript编写)所需的运行时。

第一步是安装Node.js。 您有几个安装选项。 您可以编译源代码或运行适用于各种系统的安装程序之一。 从命令行运行node -v以确认已安装Node.js并在路径上。

使用Node.js,您可以获得额外的好处:节点包管理器(NPM)。 从命令行运行npm -v确认已安装NPM并在路径上运行后,可以使用NPM如下安装CoffeeScript。

  1. npm install --global coffee-script运行npm install --global coffee-script

    --global标志使CoffeeScript在--global系统范围内可用,而不仅限于特定项目。

  2. npm命令应该输出类似/ usr / bin / coffee-> / usr / lib / node_modules / coffee-script / bin / coffee的内容。

    NPM在/ usr / bin中创建一个快捷方式,因此coffee可执行文件现在位于正确的路径上。 这是CoffeeScript编译器和解释器。

  3. 要验证coffee可执行文件在路径上,请从命令行运行coffee -v

最后一步是确保正确设置CoffeeScript环境。 为了使CoffeeScript可用于您启动的任何Node.js进程,您需要将它添加到Node.js所谓的NODE_PATH中。 当遇到无法识别的功能时,Node.js将在NODE_PATH中搜索模块(库)。

对于本文中的示例,您将主要使用Node.js作为CoffeeScript可执行文件的运行时。 最简单的方法是将所有NPM模块简单地添加到NODE_PATH。 要查找NPM模块的位置,请输入npm ls -g 。 您需要添加一个将NODE_PATH指向此位置的环境变量。 例如,如果npm ls -g打印/ usr / lib,则这些模块位于/ usr / lib / node_modules中。 要设置NODE_PATH环境变量,请运行export NODE_PATH = / usr / lib / node_modules。

通过将上一个命令放在启动脚本中(例如,〜/ .bash_profile),可以进一步简化操作。 要验证更改,请通过执行Node启动Node.js shell,然后键入require('coffee-script') 。 Node.js外壳程序应加载CoffeeScript库。 如果可行,则可以使用CoffeeScript环境。 现在,您可以从编译器开始探索CoffeeScript。

编译器

运行CoffeeScript编译器就像输入coffee -c一样容易,它会启动CoffeeScript的read-evaluate-print-loop( REPL )。 要执行编译器,您需要向其传递要编译的CoffeeScript文件。 创建一个名为cup0.coffee的文件,并将清单2的内容粘贴到该文件中。

清单2.杯子0
for i in [0..5]
    console.log "Hello #{i}"

您可能会猜出清单2中的两行代码会做什么。 清单3显示了正在运行的coffee cup0.coffee的输出。

清单3.运行第一个CoffeeScript
$ coffee cup0.coffee 
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5

为了更好地了解正在发生的事情,请尝试运行编译器。 输入coffee -c cup0.coffee ,这将创建一个名为cup0.js的文件。 清单4显示cup0.js的内容。

清单4. Cup 0 JavaScript
(function() {
    var i;
    for (i = 0; i <= 5; i++) {
        console.log("Hello " + i);
    }
}).call(this);

CoffeeScript的一个好处是,尽管它提供了比JavaScript更优雅的语法,但仍可以编译成非常简单的逻辑JavaScript。 您可能想知道为什么所有代码​​都包装在一个函数中。 这是因为JavaScript仅支持函数级作用域。 通过将所有内容包装在函数中,可以确保变量仅作用于该函数,并且不会变为全局变量(或更改现有的全局变量)。

打开一个名为cup1.coffee的新文件,并输入清单5中更复杂的代码。

清单5.杯子1
stdin = process.openStdin()
stdin.setEncoding 'utf8'

stdin.on 'data', (input) -> 
    name = input.trim() 
    process.exit() if name == 'exit' 
    console.log "Hello #{name}"
    console.log "Enter another name or 'exit' to exit"
console.log 'Enter your name'

清单5中的程序提示用户输入他们的名字,然后适当地打招呼。 JavaScript没有任何内置库可用于从标准输入中读取内容,但Node.js具有。 这是利用CoffeeScript / Node.js共生的另一个示例。 在诸如C之类的语言中,从标准输入中进行读取是一个阻塞调用。 从标准输入读取完成之前,无法执行任何代码。 如果您熟悉Node.js,就知道您不能那样做。 Node.js不允许阻止I / O。 相反,您必须向stdin.on注册一个回调。

运行coffee -c cup1.coffee以查看清单6中所示的CoffeeScript编译器生成JavaScript。

清单6. Cup 1 JavaScript
(function() {
    var stdin;
    stdin = process.openStdin();
    stdin.setEncoding('utf8');
    stdin.on('data', function(input) {
        var name;
        name = input.trim();
        if (name === 'exit') { 
            process.exit();
        }
        console.log("Hello " + name);
        return console.log("Enter another name or 'exit' to exit");
    });
   console.log('Enter your name');
}).call(this);

stdin.on函数使用典型的事件绑定格式。 您可以指定要侦听的事件类型( 'data' ),然后为事件分配一个回调函数以在事件触发时执行。 在已编译JavaScript中,您会看到用于创建内联函数并将其传递给另一个函数的典型详细JavaScript。 将此与等效的CoffeeScript进行比较。 是否会让您错过所有这些括号,花括号,分号和关键字?

现在您已经知道如何编译CoffeeScript程序,下一节将介绍学习CoffeeScript最有用的功能之一:REPL。

替换

REPL是许多编程语言(尤其是功能多样的语言)中的标准工具。 REPL相当于Ruby的IRB。 只需输入coffee启动CoffeeScript REPL。 例如,尝试使用此CoffeeScript功能并解决简单的问题,如清单7所示。

清单7.使用REPL
coffee> nums = [1..10]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
coffee> isOdd = (n) -> n % 2 == 1
[Function]
coffee> odds = nums.filter isOdd
[ 1, 3, 5, 7, 9 ]
coffee> odds.reduce (a,b) -> a + b
25

每次将表达式输入REPL时,它将对表达式求值,打印结果,然后等待下一个表达式。 该示例定义了一个名为nums的变量,范围为1到10。REPL打印出刚定义的变量的值。 此功能可以立即有用。 也许您不记得定义的范围是包含范围(包括最后一个数字,在本例中为10)还是排除范围。 REPL向您显示其中包括10,因此它是一个包含范围。 如果您想要一个专用范围,只需使用nums = [1...10]

接下来定义isOdd函数。 CoffeeScript具有非常简洁的函数声明语法,考虑到JavaScript的函数性质,这是一个不错的功能。 在该示例中,REPL仅显示[Function]以使您知道isOdd变量等于一个函数。 然后声明一个新变量odds 。 您可以通过对nums调用filter函数并传入isOdd获得odds的值。 这将产生一个新数组,将其元素传递给isOdd时必须产生true。 reduce函数是根据odds调用的。 传入函数会将数组的每个值添加到先前的总和,该总和将数组中的值求和,REPL显示的总和为25。

下一部分涵盖了任何JavaScript开发人员都熟悉且亲爱的主题:浏览器中的脚本编写。

简单的网络示例

您已经了解了如何编写CoffeeScript文件并将其编译为JavaScript,然后可以在Web应用程序中使用它们。 出于开发目的,有一种更简单的方法。 CoffeeScript编译器可以在浏览器中运行,从而使您可以直接在网页中使用CoffeeScript。 但是,如果您要构建高性能的Web应用程序,则不建议使用CoffeeScript。 CoffeeScript编译器是一个大文件; 不得不即时编译CoffeeScript肯定会减慢速度。 CoffeeScript确实提供了一种简单的方法来开发具有明显的“生产路径”的应用程序。

CoffeeScript不是JavaScript工具箱或框架。 它是一种编程语言,因此不包含许多与DOM相关的便捷功能。 但是,您可以将CoffeeScript与您喜欢的工具箱一起使用。 最常见的组合是将其与jQuery一起使用。 清单8显示了一个使用jQuery和CoffeeScript的简单网页。

清单8.网页中的CoffeeScript
<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
    <script
 src="//jashkenas.github.com/coffee-script/extras/coffee-script.js">
 </script>
    <script type="text/coffeescript">
        gcd = (a,b) -> if (b==0) then a else gcd(b, a % b)
        $("#button").click -> 
            a = $("#a").val() 
            b = $("#b").val() 
            $("#c").html gcd(a,b)
    </script>
</head>
<body>
    A: <input type="text" id="a"/><br/>
    B: <input type="text" id="b"/><br/>
    <input type="button" value="Calculate GCD" id="button"/> <br/>
    C: <span id="c"/>
</body>
</html>

该网页使用Google Ajax库加载jQuery。 它加载从CoffeeScript的创建者杰里米阿什克纳斯Github上库中的CoffeeScript编译器库(见相关主题 )。 该代码然后包含一个脚本块。 脚本块不是text/javascript类型,而是text/coffeescript类型,这是CoffeeScript编译器知道如何编译脚本内容的方式。 然后,脚本创建了一个名为gcd的函数,该函数计算两个整数的最大公约数。 jQuery用于为页面上的按钮创建单击处理程序。 在此处理程序中,您将获得两个文本输入的值,并将它们传递给gcd函数。 结果被写回到网页。 $()val()html()类的函数是jQuery函数,但可以轻松地与CoffeeScript一起使用,并利用CoffeeScript的纯净语法。

结论

在本文中,您快速浏览了CoffeeScript。 随着开发环境的启动和运行,您现在可以使用REPL探索CoffeeScript。 您学习了使用编译器来查看其生成了哪种JavaScript,还学习了如何编写CoffeeScript并直接在网页中运行它。 这些示例提供了CoffeeScript语法的味道,尽管通常没有很多解释。

本系列的第2部分将深入研究CoffeeScript关键概念的细节。


翻译自: https://www.ibm.com/developerworks/web/library/wa-coffee1/index.html

入门训练圆的面积

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值