# Basic Syntax
## If - else
```tsx
// bad - we don't like inline-if with else branch, harder to read
if (condition) doSomething();
else doSomethingElse();
// good
if (condition) {
doSomething();
} else {
doSomethingElse();
}
// also good - inline if without else is fine
if (condition) doSomething();
```
## Spacing
Try to use empty lines as a tool for structuring the code even better.
đź”´Â Hard to read function without spaces:
```tsx
export const getPrerequisites = ({ router, device, transport }: PrerequisitesInput) => {
const excluded = getExcludedPrerequisites(router);
const prerequisite = getPrerequisiteName({ router, device, transport });
if (typeof prerequisite === 'undefined') return;
if (excluded.includes(prerequisite)) return;
return prerequisite;
};
```
🟢 Well-arranged code:
```tsx
export const getPrerequisites = ({ router, device, transport }: PrerequisitesInput) => {
const excluded = getExcludedPrerequisites(router);
const prerequisite = getPrerequisiteName({ router, device, transport });
if (typeof prerequisite === 'undefined') {
return;
}
if (excluded.includes(prerequisite)) {
return;
}
return prerequisite;
};
```
As you can see, there is no line between `excluded` and `prerequisite` – that’s because in this context that separation adds little benefit, instead the constants become the group. Base the groups not only on type of code _(method call, if-block, declaration)_ but on what that code does.
## Function parameters
Functions accepting multiple parameters tend to be less readable and more error-prone. This can be solved by wrapping the params (all of them, or just some, i.e. “config” params) in an object, thus effectively naming the parameters. A rule of thumb is to use wrapping for functions with more than two params, but it depends on the specific case.
đź”´Â Confusing function call with many arguments:
```tsx
const logAnimalNames = (cat: string, dog: string, guineaPig?: string, showHeading?: boolean) => {
if (showHeading) {
console.log('My Animals');
}
console.log(cat);
console.log(dog);
if (guineaPig) {
console.log(guineaPig);
}
};
logAnimalNames('Nancy', 'Rob', null, true);
```
What is the correct order? Why do I have to specify `null` for an optional param? What does `true` mean here?
🟢 Tidy function call with wrapped arguments:
```tsx
interface LogAnimalParams {
cat: string;
dog: string;
guineaPig?: string;
showHeading?: boolean;
}
const logAnimalNames = ({ cat, dog, guineaPig, showHeading }: LogAnimalParams) => {
if (showHeading) {
console.log('My Animals');
}
console.log(cat);
console.log(dog);
if (guineaPig) {
console.log(guineaPig);
}
};
logAnimalNames({ cat: 'Nancy', dog: 'Rob', showHeading: true });
```
## Conditional rendering
Make sure that a condition in JSX can only be `true`/`false` . If it could
be `0` or `""` , `-42` , `[]` etc. React can render some of those values. In React Native it can also cause text outside Text component!
đź”´Â Do not use random value as condition
```tsx
// BAD
{
value && ;
}
```
🟢 Prefer
```tsx
// typeof hasValue === 'boolean'
{
hasValue && ;
}
```
```tsx
{
!!value && ;
}
```
```tsx
if (!value) return null;
return ;
```