课程E-函数1-一个超人的简单函数

这节课程介绍了函数的概念。

  • Computer science
  • functions
Print lesson
  • 年龄 9+
  • 65+ 分钟
  • JavaScript Blocks

介绍

这节课程介绍了函数的概念。 函数是我们可以重用的部分指令或代码。 除了复制粘贴,我们还可以使用函数。 我们给代码积木块命名,然后在任何时候当我们想调用代码,我们只需要通过调用函数的名称就行了。

在这节课中,我们将调用一个简单的函数并用按钮来创造一个超人可能做的动作。

任何时候你想重用代码,你可以考虑循环和函数。使用函数有几种好处。

首先,使用函数可以帮助我们在很多不同的位置重用代码。 我们只需要写一次,然后再引用它的名字。 函数的优点将会在“数字宠物函数”这个系列的第二课更加全面地展示出来。

因为我们重用代码的次数不多,函数可以让我们编写代码使代码更加精简、更容易阅读,而且也使修改代码变得更容易。

用下面的例子来突出在函数中修改代码的容易程度。


let KilometersRan = 0
input.onButtonPressed(Button.A, () => {
    Run_FasterThan_A_Speeding_Bullet()
    Run_FasterThan_A_Speeding_Bullet()
    Run_FasterThan_A_Speeding_Bullet()
    Run_FasterThan_A_Speeding_Bullet()
    Run_FasterThan_A_Speeding_Bullet()
})
input.onButtonPressed(Button.B, () => {
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
})
function Run_FasterThan_A_Speeding_Bullet()  {
    KilometersRan = 5
    basic.showNumber(KilometersRan)
    basic.clearScreen()
    basic.pause(100)
}

这里的两个按钮做的是同一件事。 如果你按下A或B,它们将显示一个闪烁的5。 让学生们选择闪烁3而不是闪烁5。 我们在按钮A上需要修改几次?(1次)我们在按钮B上需要修改几次?(5次)更改函数比更改一大块代码来说更容易些。

在这个案例中,超人的函数将帮助我们利用函数的另一大优点。 函数可以让我们用一种有意义的方式组织我们的代码,使编程与现实生活中的项目相关联。 在这节课中,你将注意到我们可以将代码拆分成我们超人可能会做的动作。 这样可以让我们更容易思考想要解决的问题,并且让代码运行变得可视化。

老师们可以考虑在第一节关于函数的课程中进行以下操作。

  1. 首先要注重演示。学生们大多数都在看和听。(初始代码解释/挑战1)
  2. 老师在学生们的帮助下继续完成大部分课程的讲解。老师对于这些帮助给出快速的反馈。(挑战2-独立练习)

对于“数字宠物函数”的第二课,老师们可以重复上面的内容,或者继续讲解并逐渐让学生们参与其中。

当然,这将取决于学生们,但是引导实操的这种教学方式可以让学生们更容易理解这些概念。

我们的micro:bit课程是根据Code.org CS 基础课程知识应用而量身定做的。 在学生们开始这些课程之前,我们鼓励学生们首先完成所有的CS基础知识。 学生们应该熟悉 Code.org CS 基础课程中的函数。

背景知识

强烈鼓励学生们优先完成以下操作:

  • 提前体验起点
  • 课程E. CS基础。 课程简要地回顾了一下之前在课程C和D之中讲授的概念。学生们将会用算法、循环、条件、事件和函数来进行编程练习。

强烈鼓励老师优先完成以下操作:

教学指南

打开

课堂活动

你将需要这些:

  • 1块micro:bit
  • 1根USB线
  • 1个AAA电池组(可选)
  • 2节AAA电池(可选)

编写文本


function doSomething()  {
    basic.showString("Hello!")
}

doSomething()
            

函数

函数可以让你在程序中创建一部分可以重用的代码。

basic.showIcon(IconNames.Heart)

showIcon

在LED屏幕上显示所选的图标


input.onGesture(Gesture.Shake, () => {

})
            

onGesture

启动一个事件处理器 (当发生某件事情时,部分程序将启动)。当你做一个手势的时候(例如:摇晃micro:bit), 这个处理器就会起作用 。


input.onButtonPressed(Button.A, () => {

})
            

onButtonPressed

启动一个事件处理器(当事情发生,例如一个按钮被按下,部分程序将会运行)。

4个步骤

指导练习

我们将在网上给出micro:bit的教程或代码。接下来,去到:makecode.microbit.org

let KeepRunning = false
let KilometersRan = 0
let XRunningPosition = 0
let YRunningPosition = 0
input.onButtonPressed(Button.A, () => {
    Run_FasterThan_A_Speeding_Bullet()
})
function Run_FasterThan_A_Speeding_Bullet()  {
    KilometersRan = 0
    KeepRunning = true
    XRunningPosition = 0
    YRunningPosition = 0
    for (let YRunningPosition = 0; YRunningPosition <= 5; YRunningPosition++) {
        for (let XRunningPosition = 0; XRunningPosition <= 5; XRunningPosition++) {
            led.plot(XRunningPosition, YRunningPosition)
            led.unplot(XRunningPosition - 1, YRunningPosition - 1)
            basic.pause(70)
        }
    }
}
input.onButtonPressed(Button.B, () => {
    MagicUsedToConjure()
})
function Object_Your_Superhero_Can_Conjure()  {

}
function MagicUsedToConjure()  {
    for (let index = 0; index <= 4; index++) {
        Object_Your_Superhero_Can_Conjure()
        basic.clearScreen()
        basic.pause(150)
    }
}

这段代码调用了一些比较复杂的函数(Run_FasterThan_A_Speeding_Bullet、Magic-Used-To-Conjure)但是这两个函数的运行的细节在这一课程中并不是很重要。 调用这些函数的位置才是这节课的重点。 在哪调用以及如何调用这些函数呢? 特定的代码积木块应该从哪里开始?

通过一个例子来发现函数如何来帮助你组织代码也是这节课的目的所在。

在这节课中,我们来看看超人。

按下按钮A调用了我们的函数Run_FasterThan_A_Speeding_Bullet (跑步速度比子弹快)。这显示了LED“正在穿过屏幕”。我们的超人可以真正动起来。

按下按钮B并摇晃micro:bit会让超人做其他超能力的事。 这就是挑战中学生们需要帮助开发的地方。 按下按钮B让超人召唤或者创造出一个物体。 它可能是用show leds(显示LED)或者show icon(显示图标)制作的一个闪烁的图标或图片。 这个挑战的任务是让学生们能够决定超人能够召唤什么,并且创作一个故事来告诉大家为什么超人将会用到这种能力。 它和摇晃挑战类似。

在此查看完成后的代码。

简单函数的挑战

挑战1

你能让超人召唤出一个物体吗?创作一个关于这个想法的故事。

提示:在函数Object_Your_Superhero_Can_Conjure(超人可以召唤的物体)中添加一些内容,显示他们可以用魔法变幻出来的东西。

查看代码

示例-我使用了show ghost icon(显示鬼魂图标的)积木块。我的超人可以召唤鬼魂来吓唬人。这个在电梯上很有趣。

let YRunningPosition = 0
let XRunningPosition = 0
let KeepRunning = false
let KilometersRan = 0
input.onButtonPressed(Button.B, () => {
    MagicUsedToConjure()
})
function MagicUsedToConjure()  {
    for (let index = 0; index <= 4; index++) {
        Object_Your_Superhero_Can_Conjure()
        basic.clearScreen()
        basic.pause(150)
    }
}
function Object_Your_Superhero_Can_Conjure()  {
    basic.showIcon(IconNames.Ghost)
}
input.onButtonPressed(Button.A, () => {
    Run_FasterThan_A_Speeding_Bullet()
})
function Run_FasterThan_A_Speeding_Bullet()  {
    KilometersRan = 0
    KeepRunning = true
    XRunningPosition = 0
    YRunningPosition = 0
    for (let YRunningPosition2 = 0; YRunningPosition2 <= 5; YRunningPosition2++) {
        for (let XRunningPosition2 = 0; XRunningPosition2 <= 5; XRunningPosition2++) {
            led.plot(XRunningPosition2, YRunningPosition2)
            led.unplot(XRunningPosition2 - 1, YRunningPosition2 - 1)
            basic.pause(70)
        }
    }
}
input.onGesture(Gesture.Shake, () => {

})

在此查看完成后的代码。

挑战2

当我们摇晃micro:bit的时候,你能让超人做一些其他事吗?创造一个和这个想法有关的故事。

查看代码

示例-答案是各种各样的...在这个例子中,micro:bit显示了一个令人惊讶的图标。当人们摇晃micro:bit的时候,超人感到很惊讶。

let YRunningPosition = 0
let XRunningPosition = 0
let KeepRunning = false
let KilometersRan = 0
input.onButtonPressed(Button.B, () => {
    MagicUsedToConjure()
})
function MagicUsedToConjure()  {
    for (let index = 0; index <= 4; index++) {
        Object_Your_Superhero_Can_Conjure()
        basic.clearScreen()
        basic.pause(150)
    }
}
function Object_Your_Superhero_Can_Conjure()  {
    basic.showIcon(IconNames.Ghost)
}
input.onButtonPressed(Button.A, () => {
    Run_FasterThan_A_Speeding_Bullet()
})
function Run_FasterThan_A_Speeding_Bullet()  {
    KilometersRan = 0
    KeepRunning = true
    XRunningPosition = 0
    YRunningPosition = 0
    for (let YRunningPosition2 = 0; YRunningPosition2 <= 5; YRunningPosition2++) {
        for (let XRunningPosition2 = 0; XRunningPosition2 <= 5; XRunningPosition2++) {
            led.plot(XRunningPosition2, YRunningPosition2)
            led.unplot(XRunningPosition2 - 1, YRunningPosition2 - 1)
            basic.pause(70)
        }
    }
}
input.onGesture(Gesture.Shake, () => {
    basic.showIcon(IconNames.Surprised)
})

在此查看一些示例代码。

独立练习

通过改变已有的函数积木块和事件处理器,创建你自己的micro:bit超人。 你的超人应该能够使用3种新的超能力。 改变图标或者LED能够创作出一个新的超人。 准备讲述一个关于新超人的故事以及它为什么执行你选择的动作。

在此查看起始代码。

问答

在活动和挑战上使用这些问题。

问题 1

使用函数的一大优点是什么?

显示答案

以下这些都是可行的答案

  1. 函数让我们能够重用代码而无须重新输入,这样代码就会更加精简一些。
  2. 如果我们需要作出一些改变,我们只需要在一个地方改动代码就可以了。
  3. 函数能够让我们更好地组织代码。

问题 2

这段代码中启动/调用函数的事件是什么?

显示答案
摇晃
当按钮A被按下
当按钮B被按下

问题 3

思考哪些事物可以使用函数概念(将重复的活动拆分成可以重复使用的片段),并将你能够放入函数的动作列表。可能的一个例子:游戏控制。

显示答案
游戏控制函数
启动游戏
显示菜单
保存游戏
等等

另一个例子可能是制作冰淇淋锥。

制作冰淇淋锥函数
选择口味
抓斗锥
勺冰淇淋
放在冰淇淋锥
吃!!!
Selecting this opens external content from our support system, which adheres to their privacy policy.