Significant Whitespace
Python, 54 + 56 = 110 bytes
Counter:
m=lambda x:sum(y.isspace()for y in x)
+1
0&lt;9or x.split()

Splitter:
m=lambda x:sum(y.isspace()for y in x)+10&lt;9or x.split()

For the counter, we use the fact that Python is okay with having just an expression on a line. It's necessary to split up +1 and 0&lt;9or x.split() to stop a NameError from being thrown, as 0&lt;9 being True prevents x.split() from being evaluated due to short circuiting.
For the splitter, since the number of whitespace is always nonnegative, sum(y.isspace()for y in x)+10&lt;9 is always False and the splitting function comes into play.

Alternative 1, 59 + 60 = 119 bytes
Counter:
m=lambda x:[x.split(),sum(y.isspace()for y in x)][min([1])]

Splitter:
m=lambda x:[x.split(),sum(y.isspace()for y in x)][m in([1])]

The results of both counting and splitting are stored in a two-element list. The list is indexed by either min([1]), returning the minimum of the one-element list containing 1, or m in([1]), which returns False (equivalent to 0) as m is not contained in [1].

Alternative 2, 67 + 69 = 136 bytes
Counter:
ted=1;s=lambda x:[x.split(),sum(y.isspace()for y in x)][not s or ted]

Splitter:
ted=1;s=lambda x:[x.split(),sum(y.isspace()for y in x)][not sorted]

Like above, the results of both counting and splitting are stored in a two-element list. sorted is a built-in function which is a truthy value, so not sorted returns False (equivalent to 0). For not s or ted, since s is a function and also truthy, not s is False and ted = 1 is returned.

Alternative 3, 59 + 60 = 119 bytes
Counter:
def f(s):a=s.split();a1=len(s)-len((s*0).join(a));return a1

Splitter:
def f(s):a=s.split();a1=len(s)-len((s*0).join(a));return a
1

This is a function where splitter's result is stored in the variable a, and counter's result is stored in the variable a1. Like before, Python is fine with having just an expression on a line, in this case 1. Splitting up a1 determines what to return from the function.