# Golfed code: nested ternaries, comprehensions with several `for` clauses, lines over 160 characters

*Code longer than it needs to be*: one of the ways AI coding agents bloat software, from lessloc's [pattern catalog](https://lessloc.org/patterns/index.md). lessloc catches it as [`clever`](https://lessloc.org/guide/reference.md#tier-2) and [`dense-lines`](https://lessloc.org/guide/reference.md#tier-3).

## What makes golfed code a bad practice?

The standards that call it a bad practice: Google Python Style Guide: "Optimize for readability, not conciseness"; ESLint no-nested-ternary; Sonar S3358.

## What does lessloc do about golfed code?

lessloc catches it as [`clever`](https://lessloc.org/guide/reference.md#tier-2) and [`dense-lines`](https://lessloc.org/guide/reference.md#tier-3). The counterweight to `simpler`, so shorter never means cryptic.

- `clever` (tier 2): Golfed code: nested ternaries, nested conditional expressions, comprehensions with several `for` clauses.
- `dense-lines` (tier 3): Code lines over 160 characters, long strings and URLs aside.

## Examples

Caught as `clever`:

```ts [z.ts]
export const label = (n: number) => (n < 0 ? "neg" : n === 0 ? "zero" : "pos");
```

Written well:

```ts [z.ts]
export function label(n: number) {
  if (n < 0) return "neg";
  return n === 0 ? "zero" : "pos";
}
```

Caught as `clever`:

```python [aa.py]
def flat(grid):
    return [c for row in grid for c in row if c]
```

Written well:

```python [aa.py]
from itertools import chain


def flat(grid):
    return [c for c in chain.from_iterable(grid) if c]
```

## Related patterns

The other patterns in [Code longer than it needs to be](https://lessloc.org/patterns/index.md#code-longer-than-it-needs-to-be):

- [Brute-force idioms](https://lessloc.org/patterns/brute-force.md): lessloc catches it as `simpler`, built in for Python, JS/TS, Go, Rust, Java and C#. ruff (in every hook) and clippy (in `ci`) go deeper.
- [Hand-built counters and flag loops](https://lessloc.org/patterns/counters-and-flags.md): lessloc catches it as `simpler`.
- [A catch that only rethrows](https://lessloc.org/patterns/catch-rethrow.md): lessloc catches it as `simpler`.
- [A promise wrapped in new Promise](https://lessloc.org/patterns/promise-wrap.md): lessloc catches it as `simpler`.
- [Annotating types the compiler infers](https://lessloc.org/patterns/inferred-types.md): lessloc catches it as `simpler`.
- [A React Effect that only sets state from other values](https://lessloc.org/patterns/derived-effect.md): lessloc catches it as `simpler`.
- [Functions with many parameters (8 or more)](https://lessloc.org/patterns/long-params.md): lessloc catches it as `long-params`.
- [Deep nesting](https://lessloc.org/patterns/deep-nesting.md): lessloc catches it as `deep-nesting`.
- [Long functions](https://lessloc.org/patterns/long-function.md): lessloc catches it as `long-function`.
- [If-chains on literal values](https://lessloc.org/patterns/if-chain.md): lessloc catches it as `if-chain`.
- [A file that keeps growing](https://lessloc.org/patterns/swollen-file.md): lessloc catches it as `swollen-file`.
- [Reformatting lines the task did not change](https://lessloc.org/patterns/churn.md): lessloc gives every session a rule against it and catches it as `churn`.
- [Net growth past a budget](https://lessloc.org/patterns/net-growth.md): lessloc catches it as `net-growth`.
