<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="it" lang="it">
<head>
<title>Visibilità</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Visibilità"/>
<meta name="wx_page_id" content="1822414"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Visibilità" id="wxsec1"><h1 class="pagetitle" id="wx1">Visibilità</h1>

<p id="wx2">La porzione di programma in cui esiste un <a href="/wit/Identificatore" title="Identificatore" wx:linktype="known" wx:pagename="Identificatore" wx:page_id="446677" id="wx3">identificatore</a>, ad esempio una <a href="/wit/Variabile_%28informatica%29" title="Variabile (informatica)" wx:linktype="known" wx:pagename="Variabile_(informatica)" wx:page_id="66935" id="wx4">variabile</a>, prende il nome di visibilità o scope; ovvero il contesto in cui un identificatore viene dichiarato all'interno di un programma determina la sua <b id="wx5">visibilità</b> (o <b id="wx6">portata</b> o <b id="wx7">scope</b>). Tutte le variabili visibili a tempo di esecuzione in un certo istante sono contenute nell'<a href="/wit/Ambiente_%28programmazione%29" title="Ambiente (programmazione)" wx:linktype="known" wx:pagename="Ambiente_(programmazione)" wx:page_id="68500" id="wx8">ambiente</a>. Se più variabili dello stesso nome e dello stesso tipo vengono dichiarate in contesti diversi, è l'ambiente messo a disposizione dal linguaggio che determina in che modo le variabili sono visibili in ogni momento. Nei linguaggi più diffusi, ad esempio, il nome della variabile fa riferimento alla dichiarazione più specifica, ed esistono strumenti per indicare esplicitamente lo scope a cui si fa riferimento.</p>

<p id="wx9">Si veda il seguente esempio:</p>

<pre id="wx10">
 &lt;begin blocco 1&gt;
     var x:...            /* qui è visibile x */
     &lt;begin blocco 1.1&gt;
         var y:...        /* qui sono visibili x ed y */
     &lt;end blocco 1.1&gt;
     &lt;begin blocco 1.2&gt;
         var z:...        /* qui sono visibili x e z */
         &lt;begin blocco 1.2.1&gt;
             var y:...    /* qui sono visibili x, z e y */
         &lt;end blocco 1.2.1&gt;
     &lt;end blocco 1.2&gt;
 &lt;end blocco 1&gt;
     
</pre>

<ul id="wx11">
<li id="wx12">
<p id="wx13">Col termine <b id="wx14">variabili globali</b> vengono generalmente indicate quelle variabili dichiarate al di fuori di un sottoblocco di programma, e che sono visibili in uno o più sottoblocchi, dipendentemente dalla struttura del programma stesso. L'uso di variabili globali è fortemente scoraggiato dalle pratiche di buona programmazione, poiché rischiano di generare interazioni di difficile controllo tra diverse parti di un programma. Nell'esempio, <tt id="wx15">x</tt> è globale per il blocco 1.1, 1.2 ed 1.2.1.</p>

<ul id="wx16">
<li id="wx17">
<p id="wx18">Nei <a href="/wit/Linguaggio_orientato_agli_oggetti" title="Linguaggio orientato agli oggetti" wx:linktype="known" wx:pagename="Linguaggio_orientato_agli_oggetti" wx:page_id="66990" id="wx19">linguaggi orientati agli oggetti</a>, le variabili di <a href="/wit/Classe_%28informatica%29" title="Classe (informatica)" wx:linktype="known" wx:pagename="Classe_(informatica)" wx:page_id="67016" id="wx20">classe</a> o <b id="wx21">attributi</b> sono visibili solo all'interno della istanze della classe in cui sono state dichiarate. In particolare, una variabile dichiarata come <i id="wx22">statica</i> è unica per la classe, e condivisa da ogni sua istanza. In altre parole, in ogni istanza della classe tale attributo punta alla medesima area di memoria, pertanto una sua modifica effettuata in una istanza si riflette in tutte le altre istanze della medesima classe.</p>
</li>
</ul>
</li>

<li id="wx23">
<p id="wx24">Le <b id="wx25">variabili locali</b> sono quelle definite all'interno di un sottoblocco, ad esempio all'interno di una <a href="/wit/Funzione_%28informatica%29" title="Funzione (informatica)" wx:linktype="known" wx:pagename="Funzione_(informatica)" wx:page_id="66786" id="wx26">funzione</a>, e quindi visibili solo internamente al sottoblocco stesso, secondo il tipo di <a href="/wit/Ambiente_%28programmazione%29" title="Ambiente (programmazione)" wx:linktype="known" wx:pagename="Ambiente_(programmazione)" wx:page_id="68500" id="wx27">ambiente</a> messo a disposizione dal linguaggio. Nell'esempio, le variabili <tt id="wx28">y</tt> sono locali per ciascuno dei due blocchi, e sono distinte l'una dall'altra: la prima è locale in 1.1 e la seconda in 1.2.1. Infine, <tt id="wx29">z</tt> è globale per il blocco 1.2.1 e locale per il blocco 1.2.</p>

<ul id="wx30">
<li id="wx31">
<p id="wx32">Nei <a href="/wit/Linguaggio_orientato_agli_oggetti" title="Linguaggio orientato agli oggetti" wx:linktype="known" wx:pagename="Linguaggio_orientato_agli_oggetti" wx:page_id="66990" id="wx33">linguaggi orientati agli oggetti</a>, gli attributi (non statici) di una classe sono elementi individuali di ogni distinta istanza. In tal caso, in ogni istanza tale attributo è presente localmente all'oggetto stesso, e distinto da quelli presenti in altre istanze della medesima classe.</p>
</li>

<li id="wx34">
<p id="wx35">I parametri formali di una funzione sono assimilabili ai parametri locali dal punto di vista della visibilità.</p>
</li>

<li id="wx36">
<p id="wx37">In molti linguaggi, è possibile dichiarare una variabile all'interno di un blocco di una <a href="/wit/Struttura_di_controllo" title="Struttura di controllo" wx:linktype="known" wx:pagename="Struttura_di_controllo" wx:page_id="98873" id="wx38">struttura di controllo</a>, o usare un costrutto di blocco solo per delimitare lo scope di una variabile locale, o ancora dichiarare una variabile all'interno di un'<a href="/wit/Espressione_%28informatica%29" title="Espressione (informatica)" wx:linktype="known" wx:pagename="Espressione_(informatica)" wx:page_id="259888" id="wx39">espressione</a>. Queste variabili sono visibili solo all'interno del blocco o dell'espressione in cui sono dichiarate, come mostrato nell'esempio. Tali pratiche facilitano il mantenimento in vita di una variabile solo per il tempo strettamente necessario, in modo da consentire economia di memoria e pulizia nel testo del programma.</p>
</li>
</ul>
</li>
</ul>
</wx:section></div>
<div id="wx_categorylinks">
<a href="/wit/index.php?title=Speciale:Categories&amp;article=Visibilit%C3%A0" title="Speciale:Categories" wx:linktype="known" wx:pagename="Speciale:Categories" id="wx40">Categoria</a>: <span dir="ltr" id="wx41"><a href="/wit/Categoria:Teorie_della_programmazione" title="Categoria:Teorie della programmazione" wx:linktype="known" wx:pagename="Categoria:Teorie_della_programmazione" wx:page_id="1009778" id="wx42">Teorie della programmazione</a></span></div>
<div id="wx_languagelinks">
Altre lingue: <a href="http://en.wikipedia.org/wiki/Scope_%28programming%29" class="external" wx:linktype="interwiki" wx:pagename="en:Scope_(programming)" id="wx43">English</a> | <a href="http://de.wikipedia.org/wiki/Variable_%28Programmierung%29#G.C3.BCltigkeitsbereich_von_Variablen_.28Scope.29" class="external" wx:linktype="interwiki" wx:pagename="de:Variable_(Programmierung)" wx:fragment="G.C3.BCltigkeitsbereich_von_Variablen_.28Scope.29" id="wx44">Deutsch</a> | <a href="http://fr.wikipedia.org/wiki/Port%C3%A9e_%28informatique%29" class="external" wx:linktype="interwiki" wx:pagename="fr:Portée_(informatique)" id="wx45">Français</a> | <a href="http://nl.wikipedia.org/wiki/Variabelenbereik" class="external" wx:linktype="interwiki" wx:pagename="nl:Variabelenbereik" id="wx46">Nederlands</a> | <a href="http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97" class="external" wx:linktype="interwiki" wx:pagename="ja:スコープ" id="wx47">日本語</a></div>
</body>
</html>
