Skip to content

Generic operators

Operators that accept a value of any type.

Every program can use these operators. No import is necessary.

Operator Arguments Gives
!! arg: <optional>T T
!= left: T, right: T boolean
!null? arg: <optional>T boolean
?? left: <optional>T, right: T T
[] typeDef: T, listOf: expression [T]
&& left: <optional>T, right: boolean boolean
&& left: <optional>T, right: <optional>S boolean
== left: T, right: T boolean
cast arg: T, target: S S
empty node: T &lt;optional&gt;T
null? arg: <optional>T boolean
ret a: T T
unwrap arg: <optional>T T
wrap arg: T &lt;optional&gt;T

Target support marks

  • Own template
  • Default template
  • No template

The operator works for a target with an own template and for a target with the default template. The default template is the * entry of the definition: it writes the same code for every target that has no template of its own. A target with no template writes no code, and a program that uses the operator does not compile for that target.

!!

(!! arg) → T
!!(arg: <optional>T)

Gives the value of the optional argument.

The program stops when the value is empty. Use ?? when the program must continue with a default value.

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: default template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Optional values

docs/examples/core/generic/optionals.rgr
class Main {
sfn main:void () {
def name@(optional):string
def shown (?? name "unknown")
print ("default " + shown)
if (null? name) {
print "the name is empty"
}
name = "Ada"
def value (!! name)
print ("value " + value)
}
}
main function, JavaScript
let name;
const shown = (name ?? "unknown");
console.log("default " + shown);
if ( typeof(name) === "undefined" ) {
console.log("the name is empty");
}
name = "Ada";
const value = name;
console.log("value " + value);
The complete file
class Main {
constructor() {
}
}
/* static JavaSript main routine at the end of the JS file */
function __js_main() {
let name;
const shown = (name ?? "unknown");
console.log("default " + shown);
if ( typeof(name) === "undefined" ) {
console.log("the name is empty");
}
name = "Ada";
const value = name;
console.log("value " + value);
}
__js_main();

Definition: compiler/Lang.rgr, line 4288

!=

(!= left right) → boolean
!=(left: T, right: T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: default template
  • Rust: own template
  • Python: default template
  • Java: default template
  • Kotlin: default template
  • Dart: default template
  • Swift: default template
  • C#: default template
  • C++: default template
  • PHP: default template
  • Scala: default template

Definition: compiler/Lang.rgr, line 11489

!null?

(!null? arg) → boolean
!null?(arg: <optional>T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 5637

??

(?? left right) → T
??(left: <optional>T, right: T)

Gives the value of the optional argument. When that value is empty, gives the second argument.

The operator is in prefix form. Write (?? name "unknown").

Target support

  • JavaScript: own template
  • TypeScript: own template
  • Go: default template
  • Rust: default template
  • Python: default template
  • Java: default template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: default template
  • PHP: own template
  • Scala: own template

Optional values

docs/examples/core/generic/optionals.rgr
class Main {
sfn main:void () {
def name@(optional):string
def shown (?? name "unknown")
print ("default " + shown)
if (null? name) {
print "the name is empty"
}
name = "Ada"
def value (!! name)
print ("value " + value)
}
}
main function, JavaScript
let name;
const shown = (name ?? "unknown");
console.log("default " + shown);
if ( typeof(name) === "undefined" ) {
console.log("the name is empty");
}
name = "Ada";
const value = name;
console.log("value " + value);
The complete file
class Main {
constructor() {
}
}
/* static JavaSript main routine at the end of the JS file */
function __js_main() {
let name;
const shown = (name ?? "unknown");
console.log("default " + shown);
if ( typeof(name) === "undefined" ) {
console.log("the name is empty");
}
name = "Ada";
const value = name;
console.log("value " + value);
}
__js_main();

Definition: compiler/Lang.rgr, line 4903

[]

([] typeDef listOf) → [T]
[](typeDef: T, listOf: expression)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: default template
  • Python: default template
  • Java: own template
  • Kotlin: default template
  • Dart: default template
  • Swift: default template
  • C#: own template
  • C++: own template
  • PHP: default template
  • Scala: own template

Definition: compiler/Lang.rgr, line 5525

&&

(&& left right) → boolean
&&(left: <optional>T, right: boolean)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 11575

&&

(&& left right) → boolean
&&(left: <optional>T, right: <optional>S)

optional testing

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 11535

==

(== left right) → boolean
==(left: T, right: T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: default template
  • Rust: own template
  • Python: default template
  • Java: default template
  • Kotlin: default template
  • Dart: default template
  • Swift: default template
  • C#: default template
  • C++: default template
  • PHP: default template
  • Scala: default template

Definition: compiler/Lang.rgr, line 11378

cast

(cast arg target) → S
cast(arg: T, target: S)

Target support

  • JavaScript: own template
  • TypeScript: own template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 757

empty

(empty node) → <optional>T
empty(node: T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 4249

null?

(null? arg) → boolean
null?(arg: <optional>T)

Target support

  • JavaScript: own template
  • TypeScript: own template
  • Go: own template
  • Rust: own template
  • Python: own template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 5586

ret

(ret a) → T
ret(a: T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: default template
  • Rust: default template
  • Python: default template
  • Java: default template
  • Kotlin: default template
  • Dart: default template
  • Swift: default template
  • C#: default template
  • C++: default template
  • PHP: default template
  • Scala: default template

Definition: lib/stdops.rgr, line 10

unwrap

(unwrap arg) → T
unwrap(arg: <optional>T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: own template
  • Python: default template
  • Java: own template
  • Kotlin: own template
  • Dart: own template
  • Swift: own template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 4337

wrap

(wrap arg) → <optional>T
wrap(arg: T)

Target support

  • JavaScript: default template
  • TypeScript: default template
  • Go: own template
  • Rust: default template
  • Python: default template
  • Java: own template
  • Kotlin: default template
  • Dart: default template
  • Swift: default template
  • C#: own template
  • C++: own template
  • PHP: own template
  • Scala: own template

Definition: compiler/Lang.rgr, line 4267

Ranger 3.5.1 · commit f323fd4 · development build