[swift-evolution] ternary operator ?: suggestion

Craig Cruden ccruden at novafore.com
Thu Jan 7 23:14:03 CST 2016


(forgot the other colons which would also become “in” not “:”

let commission = trade.map {
	case .Buy(let quantity, let price) where Double(quantity) * price > 10000 in
    		Double(quantity) * price * vipCommissionRate / 100
	case .Buy(let quantity, let price) in
    		Double(quantity) * price * commissionRate / 100
	case .Sell(let quantity, let price) where Double(quantity) * price > 10000 in
    		Double(quantity) * price * vipCommissionRate / 100
	case .Sell(let quantity, let price) in
    		Double(quantity) * price * commissionRate / 100
}



> On 2016-01-08, at 12:11:43, Craig Cruden <ccruden at novafore.com> wrote:
> 
> I was thinking about this a bit, and was thinking that maybe we would not need a new keyword at all but just use `map` with pattern matching `case` clauses.  It would mean adding `map` to individual values — or anything that we might want to use as input for matching.  
> 
> Reference scala (section 8.5) pattern matching: http://www.scala-lang.org/docu/files/ScalaReference.pdf <http://www.scala-lang.org/docu/files/ScalaReference.pdf>
> 
> In scala inside `map` and `filter` (unfortunately not on things like `reduceLeft` or `foldLeft` you can specify pattern matching anonymous functions as such:
> 
> val num = List(1, 5, 7)
> 
> num.map {
>   case x if x < 5 => x + 1
>   case x => x - 1
> }
> 
> output: List(2, 4, 6)
> 
> So if the pattern matching was added (I don’t believe Swift currently allows case classes in maps - but then I am rather junior in the language) Swift would not need a `match expression` it would simply be part of map and become something like:
> 
> let commission = trade.map {
> 	case .Buy(let quantity, let price) where Double(quantity) * price > 10000 in
>     		Double(quantity) * price * vipCommissionRate / 100
> 	case .Buy(let quantity, let price):
>     		Double(quantity) * price * commissionRate / 100
> 	case .Sell(let quantity, let price) where Double(quantity) * price > 10000:
>     		Double(quantity) * price * vipCommissionRate / 100
> 	case .Sell(let quantity, let price):
>     		Double(quantity) * price * commissionRate / 100
> }
> 
> 
> 
> 
>> 
>> But if we go with brackets then I would recommend something like this: 
>> 
>> let commission = match (trade) {
>> case .Buy(let quantity, let price) where Double(quantity) * price > 10000:
>>     Double(quantity) * price * vipCommissionRate / 100
>> case .Buy(let quantity, let price):
>>     Double(quantity) * price * commissionRate / 100
>> case .Sell(let quantity, let price) where Double(quantity) * price > 10000:
>>     Double(quantity) * price * vipCommissionRate / 100
>> case .Sell(let quantity, let price):
>>     Double(quantity) * price * commissionRate / 100
>> }
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160108/adf566fc/attachment.html>


More information about the swift-evolution mailing list