The ! operator flips true to false and false to true. I'll show you: if (!isReady) runs when isReady is false. It's shorter than if (isReady == false). You use ! to test for absence or failure.
Examples: !found means not found, !file.good() means file has errors, !(x > 0) means x is not positive. Be careful with multiple negations. Writing if (!(!condition)) is confusing and cancels out.
Simplify to if (condition) instead. Double negatives make code hard to read.