What your describing in your second code example is a Guard Clause.
Guard clauses exist to help you avoid excessive nesting of conditions, which are hard to maintain and difficult to read:
if ()
{
throw;
}
else
{
if()
{
return;
}
else
{
if()
{
log and return;
}
else
Writing guard clauses allows you to keep your conditions separated:
if()
{
throw;
}
if()
{
return;
}
if()
{
log and return;
}
// Do actual work
Each guard clause can identify a specific condition or do specific cleanup work prior to exiting the function.
Further Reading
Replace Nested Conditional with Guard Clauses