Соглашение об именах для необязательной привязки

Одна вещь, которая первоначально отговаривала меня от включения слишком большого количества опциональных привязок в мой код, заключалась в добавлении большего количества имен переменных. Например, я обычно пишу:

if bananasInBarrel != nil{
  print("We have \(bananasInBarrel!) bananas in the barrel.")
}

Потому что альтернатива казалась немного запутанной:

if let safeBananas = bananasInBarrel{
  print("We have \(safeBananas) bananas in the barrel.")
}

Это много бананов. Я видел, как люди используют что-то вроде b в качестве нового имени переменной (которое может быть трудночитаемым в большом блоке кода), но мне интересно, существует ли общепринятый стандарт стиля имени переменной для использования с дополнительной привязкой? Спасибо за чтение.


person Rogare    schedule 17.10.2015    source источник
comment
я бы сказал, что общепринятым стандартом является тот, в котором используется if let, а не != nil. Я бы сказал, что это то, что подходит большинству из вас и не будет иметь большого значения в реальной жизни. PS: Это не так. необязательная цепочка.   -  person Korpel    schedule 17.10.2015
comment
Эй, да, я перехожу на подход if let для более безопасного кода, но меня интересовали соглашения об именах для новой переменной, чтобы упростить чтение. Это может стать грязным!   -  person Rogare    schedule 17.10.2015
comment
if let ... является необязательной связкой, а не цепочкой.   -  person Martin R    schedule 17.10.2015
comment
Да. Это действительно может стать грязным, но когда я брал уроки для Swift или искал некоторые коды Pro Swift, все использовали if let. Это похоже на имя переменной, например, myName. Быстрые вещи. Чтобы иметь необязательную цепочку, вам нужно более одной опции. Если последний необязательный параметр равен нулю, то все выражение равно нулю   -  person Korpel    schedule 17.10.2015
comment
@MartinR Ага, моя ошибка. Спасибо за исправление.   -  person Rogare    schedule 17.10.2015
comment
Я не думаю, что есть общепринятый стандарт. Но обратите внимание, что вы даже можете использовать то же имя: if let bananasInBarrel = bananasInBarrel { ... }, которое создает переменную бананыInBarrel, областью действия которой является блок if.   -  person Martin R    schedule 17.10.2015
comment
Ответы на этот вопрос будут в первую очередь основаны на мнении. Я лично презираю if let x = x, потому что это может привести к путанице у читателя вашего кода. Теперь у вас есть две переменные x в вашем коде, одна необязательная, а другая нет. Я знаю, что одна из самых сложных вещей в программировании — это придумывать имена переменных. Вы можете создать свое собственное соглашение, например добавить _u к unwrapped, например if let bananasInBarrel_u = bananasInBarrel. По крайней мере, это было бы ясно читателю.   -  person vacawama    schedule 17.10.2015
comment
Хорошо, это здорово. Спасибо за объяснение масштаба, @MartinR, и это классная идея, @vacawama — спасибо!   -  person Rogare    schedule 17.10.2015


Ответы (1)


Просто используйте то же имя:

if let bananasInBarrel = bananasInBarrel {
  print("We have \(bananasInBarrel) bananas in the barrel.")
}

Не используйте венгерскую нотацию — компилятор будет жаловаться, если вы используете необязательный необязательный элемент.

person Johannes Auer    schedule 17.10.2015