Лучший способ выполнить нулевую проверку в Dataweave Mule

Обычно я выполняю нулевую проверку в Dataweave, как показано ниже,

{payload.variableA when payload! = null в противном случае null}

Но один из моих коллег предложил мне использовать значение по умолчанию {}, чтобы уменьшить количество проверок на null, как показано ниже:

%var x = payload default {}
{
payload.variableA
}

Поскольку это улучшает читаемость, особенно при сложных преобразованиях.

Но действительно ли это хорошая практика? Вызовет ли это какие-либо проблемы, например, создание ненужных пустых объектов?


person Rohit Kakani    schedule 21.05.2020    source источник


Ответы (1)


Во-первых, payload.variableA должен возвращать ноль, если полезная нагрузка равна нулю. Вам не нужно это проверять. Попытка получить доступ к ключу на нулевом объекте возвращает null, а не генерирует что-то вроде исключения с нулевым указателем, к которому вы, возможно, привыкли.

Вы можете думать о default как об операторе объединения с нулевым значением для Dataweave. Вы можете установить для него пустой объект, значение по умолчанию и т. Д. И т. Д.

https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-defaults

Оператор по умолчанию ведет себя одинаково в DW1 и DW2.

person Michael Jones    schedule 21.05.2020
comment
Понятно. Но допустим, если мы хотим получить доступ к более глубоким дочерним элементам, таким как: {x: payload.variableA.variableB, y: payload.variableA.variableB.variableC z: payload.variableA}, то разве нам не нужно выполнять проверку Null? вместо этого, как вы думаете, мы можем сделать что-то вроде этого:% var temp = payload.variableA default {} {x: temp.variableB, y: temp.variableB.variableC z: temp} Будет ли Y работать по-прежнему? - person Rohit Kakani; 22.05.2020
comment
@RohitKakani нет. Вы можете сделать это буквально { a: null.A.A.A }, и это даст {a: null } без каких-либо ошибок. Единственный способ отличить ноль от «этого ключа даже не существует» - это выполнить проверку типа { test: "key presset" when null.A.A.A? otherwise "key missing" }. Это приводит к тому, что вы «пропали без вести». Итак, у вас есть ?, чтобы проверить, существует ли ключ. В конечном итоге data-weave не заботится о том, является ли объект, к которому вы пытаетесь получить доступ, ключом, null, и ему безразлично, существует ли ключ или нет - в этих случаях он вернет null. Теперь все равно, если вы попытаетесь сделать что-то вроде принуждения. - person Michael Jones; 24.05.2020
comment
Понял. Спасибо! - person Rohit Kakani; 25.05.2020
comment
то же самое с flowVars: можем ли мы заменить это: variableA: null, когда flowVars.variableB == null, в противном случае flowVars.variableB на variableA: flowVars.variableB - person Rohit Kakani; 29.05.2020