Pharo by Example - 第三章 Pharo快速导览

标签: Pharo ; Smalltalk ;


本章将带你进行一次高层次的Pharo之旅,帮助你适应环境。你会有很多机会去尝试,所以当你阅读这一章时,手边最好有一台电脑。

特别是,您将了解与系统交互的不同方式,并了解一些基本工具。您还将学习如何定义新的方法、创建对象以及向其发送消息。

试着记住,这只是Pharo的一个快速之旅,一个环境的试用者。当你对某些东西不理解时,不要陷入僵局,在接下来的几章中,几乎可以肯定会有更详细的介绍。你不需要知道所有的事情,或者至少,你不需要马上知道所有的事情。把令你困惑或感兴趣的东西记下什么,然后继续读下去;你读得越深入,一切都会变得更加清晰。

注意:本书中的大多数介绍性材料适用于任何Pharo版本,所以如果您已经安装了一个版本,那么您不妨继续使用它。然而,由于这本书是为Pharo 90编写的,如果您注意到您的系统的外观或行为与这里描述的不同,请不要感到惊讶。

3.1 World菜单

一旦Pharo开始运行,您应该会看到一个单独的大窗口,可能包含一些打开的Playground窗口(参见图3-1)。您可能会注意到菜单栏,但Pharo也使用弹出式的上下文菜单。

图3-1 World菜单

单击Pharo窗口背景上的任意位置将显示World菜单,其中包含许多Pharo工具、实用程序和设置。

花点时间探索一下World菜单吧。您将看到一个列表,其中包含许多Pharo的核心工具,包括系统浏览器、Playground、包管理器Iceberg和许多其他工具。我们将在接下来的章节中更详细地讨论它们。

3.2 与Pharo互动

Pharo提供了三种使用鼠标或其他定点设备与系统交互的方式。

单击(click) 这是最常用的鼠标按键,通常相当于左键单击(或在没有任何修饰键的情况下单击单个鼠标按钮)。例如,点击Pharo窗口的背景,调出World菜单(图3-1)。

右击(action-click) 这是次常用的按键。它用于调出上下文菜单,该菜单根据鼠标指向的位置提供不同的操作集(参见图3-2)。如果您使用的是单键鼠标,则通常会将 action-click 配置为按住Ctrl键的同时单击鼠标。

meta-click 最后,你可以通过 meta-click 点击映像中显示的任意对象来激活“Morphic光环”,这是一组手柄,用于对屏幕上的对象本身执行操作,例如检视它们或调整它们的大小(参见图3-3)。如果你让鼠标停留在一个手柄上,会弹出一个帮助气泡来解释它的功能。在Pharo中,Meta-Click的方式取决于您的操作系统:在单击时必须按住Ctrl-Shift或Alt-Shift(在Windows或Linux上)或Option-Shift(在MacOS上)。

[注] 在我的系统上,Meta-click是单击鼠标中键,即滚轮。

图3-2 右击显示上下文菜单

图3-3 在窗口上Meta-click会打开光环

术语

如果您与Pharoer们交谈一会儿,您会注意到他们通常不使用像"调用操作"或"调用方法"这类可能会在其他编程语言中听到的术语。相反,他们会说发送信息。这反映了这样一种观念,即对象对它们自己的操作负责,并且与消息相关联的方法是动态查找的。向对象发送消息时,选择适当的方法来响应您的消息。在大多数(但不是所有)情况下,执行的是与消息同名的方法。

作为用户,您不需要了解每一条消息是如何工作的,唯一需要知道的是您所感兴趣的对象的可用消息。这样,对象可以隐藏其复杂性,并且可以在不损失灵活性的情况下保持尽可能简单的编码。

如何找到每一个对象的可用消息是我们稍后将详细说明的问题。

3.3 Playground和Transcript

让我们做一些简单的练习来适应我们的新环境:

  1. 关闭所有已打开的Pharo窗口。

  2. 查看菜单,打开Transcript和Playground

  3. 定位并调整Transcript和Playground窗口的大小,使Playground正好与Transcript重叠(参见图3-4)。

图3-4 执行表达式,在Transcript中显示字符串

您可以通过拖动窗口的一个角来调整窗口的大小。在任何给定时间内,只有一个窗口处于活动状态;它是最前面的窗口,并且其边框突出显示。

关于Playground

Playground对于输入和运行您想要试验的代码片段非常有用。您还可以使用Playground来输入您想要记住的任何文本,例如待办事项列表或者是为使用您的映像的人提供的说明。

将下面的文本输入到Playground中:

Transcript show: 'hello world'; cr.

尝试在刚刚键入的文本上的不同位置上双击。请注意如何选择整个单词、整行或所有文本,具体取决于您是在单词内、在行尾还是在整个表达式的末尾单击。特别是,如果将光标放在第一个字符之前或最后一个字符之后并双击,则会选择整个段落。

选中您输入的文本,右键点击并选择Do It。注意文本hello world是如何出现在Transcript窗口中的(参见图3-4)。再来一次!

3.4 快捷键

如果要计算表达式的值,不需要一直右击。相反,您可以使用每个菜单项旁边显示的键盘快捷键。尽管Pharo看起来像是一个鼠标驱动的环境,但它包含了200多个不同工具的快捷键,以及为Pharo映像中包含的143000种方法中的任何一种分配键盘快捷键的设施。

根据您的平台,您可能需要按Control、Alt和Command中的一个修饰键。我们将在本书的其余部分将修饰键统称为Cmd键,所以每次您看到类似Cmd-D的内容时,需要根据您的操作系统将其替换为适当的修饰键。在Windows中,对应的修饰键是Ctrl,在Linux中,它可能是 Alt 或 Ctrl 键。

除了Do It,您可能已经注意到了Do It and goPrint itCheck it以及上下文菜单中的其他几个选项。让我们快速浏览一下其中的每一个。

3.5 Doing vs. printing

在Playground中输入表达式3 + 4,现在,通过键盘快捷键Cmd-D来执行Do it

如果什么都没发生,不要感到惊讶!您刚才所做的是将带有参数4的消息+发送到数字3。正常情况下,得到结果7并返回给您,但由于Playground不知道如何处理这个答案,它根本没有显示答案。如果你想看到结果,你应该把它打印出来。Print it实际上编译了表达式,执行它,再将消息printString发送给结果,并显示结果字符串。

选中3 + 4,然后Print it(Cmd-P)。这一次,我们看到了预期的结果.

3 + 4
>>> 7

在本书中,我们使用符号>>>作为约定,表示当您对特定的Pharo表达式执行Print it时,它会产生给定的结果。

3.6 Inspect

选择或将光标放在3 + 4行,这一次使用Inspect it(CMD-I)。

现在你应该会看到一个标题为“Inspector on 7”的新窗口,如图3-5所示。检查器是一个非常有用的工具,它允许您浏览系统中的任意对象并与之交互。窗口的副标题“a SmallInteger(7)”告诉我们,7SmallInteger类的一个实例。顶部面板允许我们浏览对象的实例变量及其变量值。底部面板可以用于编写向被检视的对象发送消息的表达式。尝试在检查器的底部面板中键入self square,然后选择Print it

图3-5 使用Inspect检视一个简单的数字

检查器提供特定的选项卡,这些选项卡根据所检视对象的类型显示与对象有关的信息和视图。查看Morph new openInWorld,你应该会得到类似于图3-6的东西。

图3-6 使用Inspect检视一个图形(Morph)

3.7 其它操作

可能使用的其他右键单击选项如下:

  • Do it and go 在Playground一侧打开一个检查器。它允许我们浏览对象的结构。尝试使用检查器查看上一个表达式Morph new openInWorld,然后浏览结构。

  • Basic Inspect it 打开经典的检查器,该检查器提供更少的界面和对对象的更改的实时更新。

  • Debug it 在代码上打开调试器

  • Profile it 使用Pharo分析工具分析代码,显示发送的每条消息所花费的时间。

  • Code search 提供系统浏览器提供的几个选项,例如浏览表达式的源代码、搜索发送者和实现者等。

Calypso: 系统浏览器

系统浏览器(System Browser),也被称为“类浏览器”,是Pharo的关键工具之一。正如我们将要看到的,实际上在Pharo中有几个有趣的浏览器,但System Browser是所有映像中都能找到的基本浏览器。系统浏览器的当前实现称为Calypso。系统浏览器的早期版本称为Nautilus

在给定方法上打开系统浏览器

下面的方法并非我们打开浏览器的常用方式:我们可以使用更高级的工具!但出于练习的目的,请执行以下代码片段:

ClyFullBrowserMorph openOnMethod: Integer>>#slowFactorial

它将在方法slowFactors上打开一个系统浏览器,如图3-7所示。标题栏‘Integer»#slowFactors’表明我们正在浏览Integer类及其方法slowFactors。图3-7显示了浏览器显示的不同实体:包、类、协议、方法和方法定义。

图3-7 系统浏览器显示了Integer类的slowFactorial方法

在Pharo中,默认的系统浏览器是Calypso。但是,正如我们已经提到的,在Pharo环境中还可以安装其他的系统浏览器。每个系统浏览器可能具有其自己的图形用户界面,它们的界面可能与Calypso的界面非常不同。从现在起,我们将交替使用“浏览器”、“系统浏览器”和“Calypso”这三个术语。

3.9 本章小结

这一章是一个旋风式的旅行,给您介绍了Pharo环境以及您在编程中将会用到的一些主要工具。您还看到了一些Pharo的语法,尽管您可能还没有完全理解它。以下是我们所学到的一些小结:

  • 您可以点击Pharo背景调出World菜单并启动各种工具。

  • Playground是一个用于编写代码片段以及对其求值的工具。您还可以使用它来存储任意文本。

  • 您可以在Playground或任意其他工具中对文本使用键盘快捷键来对代码求值。其中最重要的是Do it(Cmd-D)、Print it(Cmd-P)、Inspect it(Cmd-I)和Browser it(Cmd-B)。

  • 系统浏览器是浏览Pharo代码和开发新代码的主要工具。

  • 测试运行器是用于运行单元测试的工具,有助于测试驱动开发。

  • 调试器允许您检查错误和异常(如运行测试时遇到的错误或失败)。您甚至可以在调试器中创建新方法。