Tact has basic support for strings. Strings support unicode and don't have any special escape characters like \n.
The use of strings in smart contracts should be quite limited. Smart contracts are very exact programs for managing money, they're not intended for interactive CLI.
Strings are immutable. Once a sequence of characters is created, this sequence cannot be modified.
If you need to concatenate strings in run-time, you can use a StringBuilder. This object handles gas efficiently and supports append() of various types to the string.
import "@stdlib/deploy";
contract Variables with Deployable {
// contract variables are persisted in state and can change their value between transactions
// they cost rent per their specified size
contractVar1: Int as coins = ton("1.26");
contractVar2: Int as uint64;
init(arg1: Int) {
// contract variables support complex initializations that are calculated in run-time
self.contractVar2 = min(arg1, pow(2, 64) - 1);
}
// receivers handle incoming messages and can change state
receive("increment") {
// local variables are temporary, not persisted in state
let localVar1: Int = 100 * 1000;
localVar1 = localVar1 * 2;
// contract variables that are persisted in state can only change in receivers
self.contractVar1 = self.contractVar1 + 1;
self.contractVar2 = self.contractVar2 + 1;
}
// getters are executed by users to query data and can't change state
get fun sum(arg1: Int): Int {
// local variables are temporary, not persisted in state
let localVar1: Int = 100 * 1000;
localVar1 = localVar1 * 2;
// getters can access everything but for read-only operations only
return arg1 + self.contractVar1 + localVar1;
}
}