xref: /aosp_15_r20/external/kotlinpoet/docs/l-for-literals.md (revision 3c321d951dd070fb96f8ba59e952ffc3131379a0)
1*3c321d95SSadaf Ebrahimi%L for Literals
2*3c321d95SSadaf Ebrahimi===============
3*3c321d95SSadaf Ebrahimi
4*3c321d95SSadaf EbrahimiAlthough Kotlin's string templates usually work well in cases when you want to include literals into
5*3c321d95SSadaf Ebrahimigenerated code, KotlinPoet offers additional syntax inspired-by but incompatible-with
6*3c321d95SSadaf Ebrahimi[`String.format()`][formatter]. It accepts **`%L`** to emit a **literal** value in the output. This
7*3c321d95SSadaf Ebrahimiworks just like `Formatter`'s `%s`:
8*3c321d95SSadaf Ebrahimi
9*3c321d95SSadaf Ebrahimi```kotlin
10*3c321d95SSadaf Ebrahimiprivate fun computeRange(name: String, from: Int, to: Int, op: String): FunSpec {
11*3c321d95SSadaf Ebrahimi  return FunSpec.builder(name)
12*3c321d95SSadaf Ebrahimi    .returns(Int::class)
13*3c321d95SSadaf Ebrahimi    .addStatement("var result = 0")
14*3c321d95SSadaf Ebrahimi    .beginControlFlow("for (i in %L..<%L)", from, to)
15*3c321d95SSadaf Ebrahimi    .addStatement("result = result %L i", op)
16*3c321d95SSadaf Ebrahimi    .endControlFlow()
17*3c321d95SSadaf Ebrahimi    .addStatement("return result")
18*3c321d95SSadaf Ebrahimi    .build()
19*3c321d95SSadaf Ebrahimi}
20*3c321d95SSadaf Ebrahimi```
21*3c321d95SSadaf Ebrahimi
22*3c321d95SSadaf EbrahimiLiterals are emitted directly to the output code with no escaping. Arguments for literals may be
23*3c321d95SSadaf Ebrahimistrings, primitives, and a few KotlinPoet types described below.
24*3c321d95SSadaf Ebrahimi
25*3c321d95SSadaf Ebrahimi [formatter]: https://developer.android.com/reference/java/util/Formatter.html
26