Optional parameters: Difference between revisions

Content added Content deleted
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}}==