Difference between revisions of "How to Program/en"

From expecco Wiki (Version 2.x)
Jump to navigation Jump to search
Line 15: Line 15:
The method finder is opened via the "''Extras''" → "''Tools''" → "''Method Finder''" menu item.
The method finder is opened via the "''Extras''" → "''Tools''" → "''Method Finder''" menu item.
A similar tool called "'Action Finder''" is provided to find action blocks in the diagram editor.
A similar tool called "'Action Finder''" is provided to find action blocks in the [[CompoundBlock Editor/en | diagram editor]].
== Executing Code Fragments ==
== Executing Code Fragments ==

Latest revision as of 00:24, 13 October 2019

Introduction to Programming in expecco[edit]

Before you start programming, please read this document, which describes how program code is handled in expecco. Unless you are familiar with the dynamics of a Smalltalk development environment, some of it may be unknown to you. You will have more fun and be more productive, if you know the power of the tools.

Find Functions by Example[edit]

Expecco includes a very powerful tool called "Method Finder", to help finding operations by expected result. You have to give it input values and a desired result value, and it will search for an operation which compute that value. In other words, it answers the questions: "given an input A, which operation will give me X as output?", or "given inputs A,B,C, which operation will give me X?".

For example, if you don't know how to perform a bitwise mask operation in Smalltalk, open a method finder, enter "2r10101010" as input1, "2r1111000" as input2 and "2r10100000" as result value. The finder will answer with all all operations with that outcome.

The method finder is opened via the "Extras" → "Tools" → "Method Finder" menu item.

A similar tool called "'Action Finder" is provided to find action blocks in the diagram editor.

Executing Code Fragments[edit]

Most of the tools inside expecco (especially the editor, notepad, data inspector and debugger) are able to execute code fragments.

To do this, select the piece of code to be executed and choose one of the "doIt", "printIt" or "inspectIt" menu functions. If no text is selected, the full cursor text line is evaluated. The ESC-key selects everything from the start of the line up to the current cursor position.

"DoIt" will simply execute the code, "printIt" will paste the returned value and "inspectIt" will open a data inspector on the result.

The syntax depends on the context: in a workspace, it is selectable via a menu setting, in a debugger, it will be the language of the function being shown, in an inspector it is usually Smalltalk syntax.

To get a feeling for this, try the following:

  • open a workspace (Mainmenu: "Extras" → "Tools" → "Notepad")
  • select Smalltalk syntax (Workspacemenu: "Workspace" → "Smalltalk")
  • enter a piece of Smalltalk code (for example: "1024 hexPrintString")
  • select this code
  • apply "PrintIt"
  • the text "400" (which is the hexadecimal representation of the integer 1024) will be pasted at the text cursor position.

Try the same with the code fragment: " 'hello world' copyTo: 5 ".

Opening a Notepad (also called "workspace")[edit]

Opening workspace.png

Evaluating a code fragment[edit]

Workspace printit.png

If you prefer JavaScript syntax, change it via (Workspace menu: "Workspace" → "JavaScript").
Of course, you have to enter "hello world".copyTo(5) then, to get the above result.

Inspecting Data[edit]

Now do the same, but apply the "inspectIt" menu function instead. An inspector window will appear, which shows the resulting object (i.e. the "Return value" of the expression). Here, a string object containing the first 5 characters is inspected:

Inspector tool.png

The inspector's left subview presents the internal slots of the object plus some meta-info (class, size and useful representations) as a list. When an item is selected, that slot's value is shown in the right subview. This is another workspace (so "doIt" is again possible there).

Double-click on a left entry navigates into it. Use the back-button to see the previous object again.

Hot-Swapping Code[edit]

One of the coolest feature of expecco is its hot-swap capability. Code can be edited and recompiled while the program (test) is running, without a need to stop the execution. However, it is not possible to hot-swap the one function which is currently being executed: it has to be either returned from, or restarted after a change. When an elementary function's code is changed, the new version will be activated with the next call.

Hot Swap Example[edit]

To demonstrate the above, create a Smalltalk elementary block (give it any name, such as "Testblock"), give it one input and one output parameter:
Defining TestBlock scheme.png

and define its code as:

    out1 value:(in1 value * 2)

if you prefer JavaScript, the code would be:

execute() {
    out1.value( in1.value() * 2);

Then create a compound action block (say "Testblock-Runner"), and drop the above TestBlock-action into its network, freeze its input value with some number, add a "Transcripter" which shows the output and add a delay step. Connect the delay step to be executed sequentially after the Testblock:

Defining TestRunSetup1.png

Now switch to the "Test/Demo" tab, add a loop-counter pin to the test step with a value of (say 100):

Defining TestRunSetup2.png

Now, run it.
As you can see, the running network outputs the input value multiplied by 2 once a second.

Let it continue to run, while opening another expecco window, and navigate to your test block there. Change the code to multiply by 3 instead of 2, and "accept" it. Go back to the still running test-loop and notice that the generated output values have changed.

Congratulation: you have changed the code of an action, while the test is running.

Programming "in the Debugger"[edit]

You can also change code inside a debugger. To try, place a breakpoint on a code line in the above elementary action, then, when in the debugger make a change to the code. For example, add a debug print line such as:

Transcript showCR:'hello'

and accept the change (in the debugger).
Finally, press "Continue" or "Restart".

If you continue, the change will be effective when the action is invoked the next time. If you restart, the action will be restarted from the beginning, now executing your changed code.

Copyright © 2014-2018 eXept Software AG