> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/padroes-de-programacao/mutable-data.md).

# Dados mutáveis

Ao fazer referência a dados de um [component](/creator/content-creator-pt/scenes-sdk7/arquitetura/entities-components.md), você pode obter a versão mutável ou a versão somente leitura (imutável).

Você deve sempre trabalhar com as versões somente leitura dos dados, quando possível. Essa prática pode trazer uma melhoria muito significativa no desempenho da sua scene, quando comparada a trabalhar sempre com versões mutáveis desses mesmos dados.

O `.get()` function em um component retorna uma versão somente leitura (imutável) do component. Você só pode ler seus valores, mas não pode alterar nenhuma das properties nele.

O `.getMutable()` function retorna uma versão do component que permite alterar seus valores. Use versões mutáveis apenas quando planejar fazer alterações em um component; caso contrário, sempre use `get()`.

```ts
// obter uma versão somente leitura (imutável)
const immutableTransform = Transform.get(myEntity)

// o seguinte NÃO funciona:
// immutableTransform.position.y = 2

const mutableTransform = Transform.getMutable(myEntity)

// a linha a seguir ALTERA a posição da entity
mutableTransform.position.y = 2
```

Uma boa prática é iterar sobre components somente leitura para verificar valores e, depois, buscar a versão mutável de um component individual apenas quando uma alteração for necessária.

```ts
// altura máxima codificada
const MAX_HEIGHT = 10

// Defina o system
function HeightLimitSystem(dt: number) {
	// iterar sobre todas as entities que têm um component Transform
	for (const [entity] of engine.getEntitiesWith(Transform)) {
		// obter valores somente leitura
		const currentHeight = Transform.get(entity).position.y

		// comparar valores
		if (currentHeight > MAX_HEIGHT) {
			// obter a versão mutável para fazer uma alteração
			const mutableTransform = Transform.getMutable(entity)

			// alterar o Transform
			mutableTransform.position.y = MAX_HEIGHT
		}
	}
}

// Adicione o system ao engine
engine.addSystem(HeightLimitSystem)
```

No exemplo acima, um system verifica os valores somente leitura de um component de uma entity. `Transform` A cada tick, ele verifica se a posição *y* é maior do que uma altura máxima codificada. Se a altura no Transform estiver acima desse limite, então, e somente então, obtemos a versão mutável do Transform. Isso pode parecer trabalho extra para a scene, mas, em uma scene em que verificamos valores a cada tick do game loop e só fazemos alterações ocasionalmente, isso resulta em enormes ganhos de desempenho.

Essa prática segue os princípios de [data oriented programming](/creator/content-creator-pt/scenes-sdk7/arquitetura/data-oriented-programming.md). Ela também está sendo gradualmente adotada como uma prática padrão da indústria no gaming, por causa da grande melhoria que ela proporciona.

{% hint style="warning" %}
**📔 Nota**: Em versões mais antigas do SDK (6.x ou anteriores), os components eram sempre tratados como mutáveis. Esse padrão pode ser um pouco mais simples de aprender, mas era muito menos eficiente de executar.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/padroes-de-programacao/mutable-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
