Visual Basic-to-revTalk cheat sheet

Programmers coming into Revolution from Visual Basic or another Basic language may find the following helpful in figuring out the differences in environments.

In most cases a direct translation of VB to revTalk is not the best way to code any given problem. As with any programming language, there are many ways to accomplish any task. Direct translation will provide the fastest way to get a project converted, but from there out a rethinkng of the code will provide code that executes faster in fewer lines, is more readable and maintainable, and may offer new insights into how to solve a problem.

The following is a starting point for developers looking into converting an existing project or coming to grips with the differences.

Assignments

XTalk languages follow a natural-language approach. In general, statements are of the imperative form in which there is an implied second-person subject of the statement (you) and the verb is the first word of the line: "put value into container", "add 1 to someVariable", etc.

Thus the VB syntax in which some statements have an implied verb ("X=4" instead of "LET X=4") must be translated to xTalk syntax "put 4 into x".

BASIC                                              revTalk

lblTemperature.Text = 98.6         put 98.6 into field "lblTemperature"

xyz = xyz + 1                  add 1 to xyz

let x = 3.14                  put 3.14 into x

Arrays

Arrays: Arrays in xTalk are associative - the index may be, but does not need to be, numeric in order to access array elements. The VB array syntax arrayName(index) is replaced by arrayName[index]. There is no VB equivalent for a non-numeric array index.

BASIC                                              revTalk

arrayName(4) = "hello"  put "hello" into arrayName[4]

                          put "hello" into arrayName["greeting"]

                          put "bonjour" into arrayName["greeting",tCurrentLanguage]

                          put "bonjour" into arrayName["greeting"][tCurrentLanguage]

                          put translationArray["hello"]["French"] into field "localizedGreeting"

User-defined types

While there are no user-defined types in xTalk, their use can be simulated using arrays:

Private Type Node

 Row As Integer 'row of the actual node

 Col As Integer 'column of the actual node

 ParentId As Integer 'parent node

 ScoreF As Integer 'Score F (total cost)

 ScoreG As Integer 'Score G (Cost of the path done)

 ScoreH As Integer 'Score H (Estimated cost of the path to do)

 Closed As Boolean 'indicates if the node is in the close list

End Type

Node.Row = 34

Node.Col = 25

Node.Closed = False

becomes

local tNode

put 34 into tNode["Row"]

put 25 into tNode["Col"]

put false into tNode["Closed"]

You can't say

Dim CurrNode as Node

Dim TargetNode as Node

TargetNode["Row"] = 34

CurrentNode["Col"] = 25

but you can say

local tNodes

put 34 into tNodes["TargetNode"]["Row"]

put 25 into tNodes["CurrentNode"]["Col"]

-- pick from the array of arrays

put tNodes["TargetNode"]["Row"] into tRowValue

or

local tNode

put 34 into Node["Row"]

put Node into tNodes["TargetNode"]

-- get just the individual node array

put tNodes["TargetNode"] into tNode

put tNode["Row"] into tRowValue

Return values

The odd VB syntax of returning a value from a function (procedure) by assigning the value to the name of the procedure is replaced in xTalk by the more standard return keyword.

SUB PROCNAME

 PROCNAME = someValue 'return someValue

END SUB

Similarities

Similarities: revTalk, like VB, is not case-specific: somevariable is the same as someVariable, as are SOMEVARIABLE and sOmEvArIAblE. Unless explicitVars is set to true (enable variable checking in the menu) variables do not need to be declared before use. This is similar to VB's OPTION EXPLICIT. In revTalk single-word string literals should be, but in general do not have to be (unless explicitVars is true), quoted:

put red into tCurrentColor

put "black" into tCurrentColor

answer hello

answer "hello, sailor"

The following are not necessary in revTalk:

 REDIM

 LET

 PI is already defined as a constant

Direct mapping from VB to revTalk

The following VB constants map directly to the following xTalk keywords:

BASIC                            revTalk

vbCRLF     cr or return

vbKeyReturn cr or return

vbNewLine     cr

vbKeyBack 8

vbOKOnly "OK"

vbNullString empty

vbBlack     "black"

vbWhite     "white"

vbRed     "red"

vbBlue     "blue"

vbGreen "green"

vbYellow "yellow"

vbMagenta "magenta"

vbCyan     "cyan"

more direct mapping:

BASIC                                       revTalk

' (comment indicator) "--" or "#" or "//"

DIM X AS INTEGER local x or global x

PROCEDURE SomeProc function SomeProc

DO               repeat

WHILE               repeat while

WEND          end while

LOOP          end while

SELECT CASE     switch (use break statement between cases)

END SELECT     end switch

CASE ELSE     default

OPEN fileName as "x" open file fileName

CLOSE "x"          close file fileName

OPTION EXPLICIT explicitVars

TRIM(SomeString)      word 1 to -1 of SomeString

No mapping

The following VB keywords have no mapping:

ON ERROR (use try/catch construct)

The following constructs have no direct equivalent:

WITH

END WITH

label:

GOTO label

dot notation:

instead of "lblMyLabel.Height" use "the height of field "MyLabel"

Timer controls

possibly use invisible buttons with "send 'Timer' to me in (the interval of me) milliseconds"

System and ActiveX controls in external libraries

Screen coordinates

VB screen coordinates are in Twips rather than in pixels. There are usually 15 twips per pixel, although this can vary depending on display characteristics.

Switch statements

SELECT CASE/CASE/CASE ELSE/END SELECT constructs are represented by the switch construct in xTalk The biggest difference is that individual case statements need "break" statements to separate them (as in C or java) and to keep the code from falling through into the next case. In VB different case items that should execute the same code are placed on the same line; in xTalk they are placed on separate lines.

BASIC                                    revTalk

SELECT CASE tValue  switch tValue

 CASE 1      case 1

   routine1          routine1

                   break

 CASE 2, CASE 3      case 2

               case 3

   routine2          routine2

                   break

 CASE ELSE      default

   routine3          routine3

END SELECT  end switch

0 Comments

Add your comment

E-Mail me when someone replies to this comment