Optional parameters: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(Add Ecstasy example) |
||
Line 872: | Line 872: | ||
Named parameters are not builtin, but map-patterns may be used as a substitute. (TODO: Example of this) [[Category:E examples needing attention]] |
Named parameters are not builtin, but map-patterns may be used as a substitute. (TODO: Example of this) [[Category:E examples needing attention]] |
||
=={{header|Ecstasy}}== |
|||
<syntaxhighlight lang="java"> |
|||
module OptionalParameters |
|||
{ |
|||
typedef Type<String >.Orderer as ColumnOrderer; |
|||
typedef Type<String[]>.Orderer as RowOrderer; |
|||
static String[][] sort(String[][] table, |
|||
ColumnOrderer? orderer = Null, |
|||
Int column = 0, |
|||
Boolean reverse = False, |
|||
) |
|||
{ |
|||
// provide a default orderer |
|||
orderer ?:= (s1, s2) -> s1 <=> s2; |
|||
// optionally reverse the order |
|||
ColumnOrderer byString = reverse |
|||
? ((s1, s2) -> orderer(s1, s2).reversed) |
|||
: orderer; |
|||
// sort the indicated column |
|||
RowOrderer byColumn = (row1, row2) -> byString(row1[column], row2[column]); |
|||
return table.sorted(byColumn); |
|||
} |
|||
void run() |
|||
{ |
|||
String[][] table = |
|||
[ |
|||
["c", "x", "i"], |
|||
["a", "y", "p"], |
|||
["b", "z", "a"], |
|||
]; |
|||
show("original input", table); |
|||
show("by default sort on column 0", sort(table)); |
|||
show("by column 2", sort(table, column=2)); |
|||
show("by column 2 reversed", sort(table, column=2, reverse=True)); |
|||
} |
|||
void show(String title, String[][] table) |
|||
{ |
|||
@Inject Console console; |
|||
console.println($"{title}:"); |
|||
for (val row : table) |
|||
{ |
|||
console.println($" {row}"); |
|||
} |
|||
console.println(); |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
Output: |
|||
<syntaxhighlight> |
|||
original input: |
|||
[c, x, i] |
|||
[a, y, p] |
|||
[b, z, a] |
|||
by default sort on column 0: |
|||
[a, y, p] |
|||
[b, z, a] |
|||
[c, x, i] |
|||
by column 2: |
|||
[b, z, a] |
|||
[c, x, i] |
|||
[a, y, p] |
|||
by column 2 reversed: |
|||
[a, y, p] |
|||
[c, x, i] |
|||
[b, z, a] |
|||
</syntaxhighlight> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |