aClone
Cria copia profunda (deep copy) de um array, incluindo sub-arrays. Pre-requisito pra trabalhar com arrays sem alterar o original por referencia.
Assinatura: aClone(aArr) -> aArrCopia
Retorna: Array
aClone faz copia profunda (deep) de um array — incluindo todos os sub-arrays aninhados. Em AdvPL, arrays sao passados por referencia, entao atribuir aB := aA NAO copia, apenas cria uma segunda referencia ao mesmo array. aClone resolve isso.
O problema
aA := {1, 2, 3}
aB := aA // aB aponta pro mesmo array
aB[1] := 99
ConOut(aA[1]) // 99 — surpresa! mudou tambem.
A solucao
aA := {1, 2, 3}
aB := aClone(aA) // copia independente
aB[1] := 99
ConOut(aA[1]) // 1 — preservou.
Quando usar
- Passar array pra funcao que voce nao quer que altere o original
- Iterar e modificar enquanto preserva versao original (snapshot)
- Cache: copia inicial vs versao trabalho
- aSort sem alterar o array original — clone primeiro, ordene a copia
Pegadinhas
- Objetos nao sao clonados — se array contem objetos (TLPP), eles sao copiados por referencia.
- Memoria — clonar arrays gigantes (100k linhas) e caro. Avalie se precisa.
- aClone nao serializa — pra persistir, use
FwSerializable.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
aArr | Array | sim | Array a clonar. |