Testing for the pre-populated variables is probably the only way to do this. But as you're asking for a single (global) var to test against, I believe you're looking for a way to have clean, dry code in your shared code block without using your posted snippet again and again.
How about doing something like this:
{% set entry = entry is defined ? entry : null %}
{% set category = category is defined ? category : null %}
Then your two variables entry
and category
will always be defined, which allows you to have very short ternary syntax in your print expressions.
<div class="myDefaultClass{{ entry ? ' myEntryClass' }}"></div>
Another thing you could do is to set a new var model
, which holds either the Entry Model or the Category Model.
{% set model = entry is defined ? entry : category is defined ? category : null %}
{% set entry = entry is defined ? entry : null %}
{% set category = category is defined ? category : null %}
<h1>{{ model.title }}</h1>