Существует несколько причин создавать переменную:
- Создание промежуточной абстракции, к которой надо будет возвращаться несколько раз. Значение переменной в течение ее жизни не изменяется.
- Создание контейнера для результата, который будет заполнен разными значениями в зависимости от ситуации. Значение переменной в течение ее жизни изменяется.
Другие причины возможны, но скорее всего являются непреднамеренным или целенаправленным усложнение хода программы. С удовольствием обсужу такие случаи в комментариях.
Объявление переменной через var
допускает ее изменение в любой момент времени. Подскажи себе и тому кто код будет читать, что переменная не будет изменяться: объяви ее через const
. А чтобы не допускать разночтений типа “этот var
случаен или преднамерен?” используй let
для переменных, которые будут изменяться.
Попробуй оценить код, написанный по правилам изложеным выше:
const editedDoc = resources.find({
_id: this.props.docId
}).fetch()[0]
if (!editedDoc) {
return {
loading: false,
noDocument: true,
valueOfFieldInDb: null,
hasValueForInput: false,
valueForInput: null
}
}
// Restore value for input
const prevModel = this.state ? this.state.model : null
const valueOfFieldInDb = getValueByPath(this.props.valuePath, editedDoc)
let valueForInput = null
if (prevModel && prevModel.valueForInput != null) {
valueForInput = prevModel.valueForInput
} else if (pc.has(this.props.valuePath)) { // if no prev state, take value from persistent storage
valueForInput = pc.get(this.props.valuePath)
} else if (valueOfFieldInDb != null) { // if neither model or state value, take value from doc
valueForInput = valueOfFieldInDb
}
assert(valueForInput != null, `Don't expect value to be null`)
return {
loading: false,
noDocument: false,
valueOfFieldInDb: valueOfFieldInDb,
hasValueForInput: true,
valueForInput: valueForInput
}