Optional parameters: Difference between revisions

Added Wren
(Add Factor)
(Added Wren)
Line 2,915:
optional_parameters theRange:="A1:C4", ordering:=1, column:=2, reverse:=1
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}}==
9,485

edits