Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
VJET/Typing Arrays with VJETDocs
var browsers = ['Firefox', 'Chrome', 'Safari'] ; //< Array var browsers = new Array('Firefox', 'Chrome', 'Safari') ; //< Array var browsers = new Array() ; //< Array browsers[0] = 'FireFox' ; browsers[1] = 'Chrome' ; browsers[2] = 'Safari' ;
What elements you put in the array are up to you. In essence, any JavaScript object can be put in the array. In our previous examples it appears that we only want browser names in our Array. Actually we only want Strings from a typing standpoint.
VJETDocs allows you to be very specific about what type you want your array to be.
Array-Dimension = "[" "]" Ex: []
Array-Dimensions = one or more Array-Dimension's back to back
Ex: [][] or [][][]
Array-Type: Limited-Type-Name Array-Dimensions
Examples of a Vjet Array Type: String[] or Number[] or Date[][]or worker.Task[][][]
An array with a single [] pairs is called a single dimension array.
var out = vjo.sysout.println; var scores = [91, 77, 84] ; //< Number[] var names = ['Mark', 'Sean', 'Juan'] ; //< String[] for(var i = 0; i < 3; i++) { var name = names[i] ; //< String var score = scores[i] ; //< Number out(name + ": " + score); }
console>
Mark: 91
Sean: 77
Juan: 84
It is possible to define arrays of arrays; these are called multi-dimension arrays. Multi-dimension arrays are defined by how many consecutive [] pairs.
The number of [] pairs is often referred to as the n-dimensional array.
Thus [][] means a 2 dimensional array and [][][] means a 3-dimensional array and so on.
var keys = [ //< Number[][] [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var total = 0 ; //< Number for(var row = 0; row < 3; row++) { for (var col = 0; col < 3; col++) { total += keys[row][col] ; vjo.sysout.println('total: ' + total) ; } }
console> total: 45
We can define an Object Literal which defines characteristics of a CPU. We scope this definition in a VJO o-type called MachineInfo.
// This is a VJO o-type. O-types allow us to define types for Javascript constructs // such as object literals. // In this example, arrs.MachineInfo is just a scoping name. vjo.otype('arrs.MachineInfo') //< public .defs({ cpu: { vendor: null, //< public String cores: null, //< public int clock: null //< public Number } }) .endType();
We can then define an Array of CPU's.
//< needs(arrs.MachineInfo) var amd = { //< MachineInfo.cpu clock: 2.8, cores: 4, vendor: 'AMD' }; // The order of elements in the Object Literal does not change the type contract. var intel = { //< MachineInfo.cpu cores: 8, clock: 3.1, vendor: 'INTEL' }; // VJET "knows" this is a uniform array of Machine.cpu's so it auto-declares // for us. We can see what the declaration would look like since we use it in the // following function overClock(...) var cpews = [amd, intel] ; //> void overClock(MachineInfo.cpu[ ] cpus) function overClock(cpus) { for(var i = 0; i < cpus.length; i++) { cpus[i].clock += 1.1 ; } } vjo.sysout.println(amd.clock) ; // outputs 2.8 // Wind them up! overClock(cpews) ; vjo.sysout.println(amd.clock) ; // outputs 3.9
console>
2.8
3.9
We can have arrays of Javascript native types and VJET types. We can even have arrays of Functions, Typed-Functions and Type-References.