:sig
DValue* DValue::key(String s)
const DValue* DValue::key(String s) const

:params
s : child key to find
return value : pointer to existing child, or 0

:see
0_DValue
2_DValue_has
2_DValue_get_or_create

:content
Looks up one child without creating it. The non-const overload forwards through references; both overloads return `0` for scalars or missing keys.


:example
DValue user;
user["email"] = "ada@example.test";
const DValue* found = user.key("email");
const DValue* missing = user.key("phone");
print(found ? found->to_string() : "none", " / ", missing ? "present" : "absent", "\n");
