Optional parameters: Difference between revisions
Content added Content deleted
(Add Factor) |
(Added Wren) |
||
Line 2,915: | Line 2,915: | ||
optional_parameters theRange:="A1:C4", ordering:=1, column:=2, reverse:=1 |
optional_parameters theRange:="A1:C4", ordering:=1, column:=2, reverse:=1 |
||
End Sub</lang> |
End Sub</lang> |
||
=={{header|Wren}}== |
|||
{{libheader|Wren-sort}} |
|||
Wren doesn't support optional parameters as such but does support method overloading by ''arity'' (i.e. number of parameters) which makes it easy to simulate them. |
|||
<lang ecmascript>import "/sort" for Cmp, Sort |
|||
class TableSorter { |
|||
// uses 'merge' sort to avoid mutating original table |
|||
// column is zero based |
|||
static sort(table, ordering, column, reverse) { |
|||
if (ordering == null) ordering = Fn.new { |r1, r2| Cmp.string.call(r1[column], r2[column]) } |
|||
var sorted = Sort.merge(table, ordering) |
|||
if (reverse) Sort.reverse(sorted) |
|||
return sorted |
|||
} |
|||
// overloads to simulate optional parameters |
|||
static sort(table) { sort(table, null, 0, false) } |
|||
static sort(table, ordering) { sort(table, ordering, 0, false) } |
|||
static sort(table, ordering, column) { sort(table, ordering, column, false) } |
|||
} |
|||
var table = [ |
|||
["first", "1"], |
|||
["second", "2"], |
|||
["fourth", "4"], |
|||
["fifth", "5"], |
|||
["third", "3"] |
|||
] |
|||
System.print("Original table:") |
|||
System.print(table.join("\n")) |
|||
System.print("\nAfter lexicographic sort by first column:") |
|||
var table2 = TableSorter.sort(table) |
|||
System.print(table2.join("\n")) |
|||
System.print("\nAfter sorting in length order of first column:") |
|||
var ordering = Fn.new { |r1, r2| (r1[0].count - r2[0].count).sign } |
|||
table2 = TableSorter.sort(table, ordering) |
|||
System.print(table2.join("\n")) |
|||
System.print("\nAfter lexicographic sort by second column:") |
|||
table2 = TableSorter.sort(table, null, 1) |
|||
System.print(table2.join("\n")) |
|||
System.print("\nAfter reverse lexicographic sort by second column:") |
|||
table2 = TableSorter.sort(table, null, 1, true) |
|||
System.print(table2.join("\n"))</lang> |
|||
{{out}} |
|||
<pre> |
|||
Original table: |
|||
[first, 1] |
|||
[second, 2] |
|||
[fourth, 4] |
|||
[fifth, 5] |
|||
[third, 3] |
|||
After lexicographic sort by first column: |
|||
[fifth, 5] |
|||
[first, 1] |
|||
[fourth, 4] |
|||
[second, 2] |
|||
[third, 3] |
|||
After sorting in length order of first column: |
|||
[first, 1] |
|||
[fifth, 5] |
|||
[third, 3] |
|||
[second, 2] |
|||
[fourth, 4] |
|||
After lexicographic sort by second column: |
|||
[first, 1] |
|||
[second, 2] |
|||
[third, 3] |
|||
[fourth, 4] |
|||
[fifth, 5] |
|||
After reverse lexicographic sort by second column: |
|||
[fifth, 5] |
|||
[fourth, 4] |
|||
[third, 3] |
|||
[second, 2] |
|||
[first, 1] |
|||
</pre> |
|||
=={{header|XSLT}}== |
=={{header|XSLT}}== |