轨道
/
JavaScript
JavaScript
/
练习
/
Lucian 的美味千层面
Lucian 的美味千层面

Lucian 的美味千层面

学习练习

简介

JavaScript 是一门动态语言,支持面向对象、命令式和声明式(例如函数式编程)等多种风格。

变量

在 JavaScript 中,给名字赋值主要有几种方式,可以用变量,也可以用常量。 在 Exercism 上,变量始终使用 camelCase 写法,常量使用 SCREAMING_SNAKE_CASE 写法。 这方面没有官方规定可循,不同的公司和组织也各有自己的风格指南。 你完全可以按自己喜欢的方式命名变量。 按照练习中准备好的方式书写,好处是它们在网页界面和大多数 IDE 中会有不同的高亮显示。

JavaScript 中的变量可以使用 const、let 或 var 关键字来定义。

使用 let 或 var 时,变量在其生命周期内可以引用不同的值。 例如,用赋值运算符=可以多次定义和重新赋值 myFirstVariable:

let myFirstVariable = 1;
myFirstVariable = 'Some string';
myFirstVariable = new SomeComplexClass();

与 let 和 var 不同,用 const 定义的变量只能赋值一次。 在 JavaScript 中,常量就是这样定义的。

const MY_FIRST_CONSTANT = 10;

// Can not be re-assigned.
MY_FIRST_CONSTANT = 20;
// => TypeError: Assignment to constant variable.
Note

💡 在后续的概念练习中,我们会探讨并解释_常量_赋值、_常量_绑定与_常量_值之间的区别。

函数声明

在 JavaScript 中,功能单元被封装在_函数_里,属于同一组的函数通常放在同一个文件中。 这些函数有形参(因此可以接收实参),并且可以用 return 关键字来_返回_一个值。 函数通过 () 语法来调用。

function add(num1, num2) {
  return num1 + num2;
}

add(1, 3);
// => 4

在这个例子中,函数名是 add。 它有两个形参,num1 和 num2。 它返回一个值,也就是表达式 num1 + num2 的结果。

接着,函数 add 用两个实参来_调用_:1 和 3。 函数的结果,也就是返回值,是 4。

Note

💡 在 JavaScript 中,声明函数的方式_有很多_种。 其中一些方式看起来和用 function 关键字不一样。 本学习路径会尝试逐步介绍它们,但如果你已经了解,可以随意使用其中任何一种。 大多数情况下,用哪一种都没有好坏之分。

供其他文件使用

要让一个function、常量或变量在_其他文件_中可用,需要用 export 关键字将它们导出。 然后另一个文件可以用 import 关键字来导入这些内容。 这也被称为模块系统。

所有测试的工作方式就是一个很好的例子。 每个练习都至少有一个文件,例如 lasagna.js,其中包含_实现_。 实现_会从该文件里 export 出去,从而可以在另一个文件中导入。 此外至少还有一个其他文件,例如 lasagna.spec.js,其中包含_测试。 这个文件会 import 那些公开的(即被 export 的)实体,以便测试实现:

// file.js
export const MY_VALUE = 10;

export function add(num1, num2) {
  return num1 + num2;
}

// file.spec.js
import { MY_VALUE, add } from './file';

add(MY_VALUE, 5);
// => 15

说明

Lucian 的女朋友正在回家的路上,而他还没做好他们的周年纪念晚餐!

在这个练习中,你将编写一些代码,帮助 Lucian 按照他最喜欢的食谱做出一份美味的千层面。

这个练习共有四个任务,都与做千层面所花的时间有关。

1. 定义预期的烤箱时间(分钟)

定义常量 EXPECTED_MINUTES_IN_OVEN,表示千层面应该在烤箱里烤多少分钟。它必须被导出。根据这本食谱,预期的烤箱时间是 40 分钟。

2. 计算剩余的烤箱时间(分钟)

实现 remainingMinutesInOven 函数,它接收千层面已经在烤箱里烤了多少分钟作为_形参_,并_返回_千层面还需要在烤箱里烤多少分钟,这个值根据上一个任务中的**预期烤箱时间(分钟)**计算得出。

remainingMinutesInOven(30);
// => 10

3. 计算准备时间(分钟)

实现 preparationTimeInMinutes 函数,它接收你往千层面里加了几层作为_形参_,并_返回_你准备千层面花了多少分钟,假设每加一层需要 2 分钟。

preparationTimeInMinutes(2);
// => 4

4. 计算总工作时间(分钟)

实现 totalTimeInMinutes 函数,它接收_两个形参_:numberOfLayers 是你往千层面里加的层数,actualMinutesInOven 是千层面已经在烤箱里烤了多少分钟。这个函数应该_返回_你烹饪千层面总共花了多少分钟,也就是准备时间(分钟)与千层面此刻在烤箱里所花分钟数之和。

totalTimeInMinutes(3, 20);
// => 26
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
JavaScript Exercism

准备好开始 Lucian 的美味千层面 了吗?

注册 Exercism,借助 37 个概念159 个练习 和真人导师指导,学习并掌握 JavaScript,全部免费。