First, there is performance:
\Umathchardef will be slightly faster (there is less indirection after all), but that shouldn't be relevant in most cases.
On the other hand, setting the
+ first and then using
\let to define your symbol also sets the right
+, so you can also use
+ directly. Of course, even if you use
\Umathchardef you can still assign the
\Umathcode, but then they are not connected: If someone changes the
+, the command
\plus defined as
\let\plus=+ changes too, but
\Umathchardef has to be changed separately.
This is especially important in e.g.
unicode-math which changes mathcodes a lot.
Also, they behave differently outside of math mode: For XeTeX, a command defined by
\Umathchardef always yields an error outside of math mode. (In LuaTeX, it will insert the corresponding character from the text font.) While the
\let based command always inserts the character the command was
\let to in text mode. What is better again depends on the character: For
\sum, there is no point in allowing it outside of math mode, so it should create an error there. On the other hand for
\alpha, you might want the name to also allow inserting the greek character in text mode. In that case you could for example do
\Umathcode"03B1=2 0 "1D6FC
then your math
\alpha is italic math alpha 𝛼, while your text mode
\alpha is still a regular text α.
\Umathchardef is a bit faster, has better error handling in XeTeX and doesn't introduce hidden dependencies on the mathcode of some character, but
\let are more flexible and might be shorter if you set the