Optional parameters: Difference between revisions

Add Ecstasy example
m (syntax highlighting fixup automation)
(Add Ecstasy example)
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]]
 
=={{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}}==
162

edits