Zakres (programowanie), także przedział, wycinek, to zdefiniowanie w kodzie źródłowym pewnego przedziału wartości wyodrębnionego z wartości określonego typu bazowego.

Zastosowania zakresu Zakresy w kodzie źródłowym stosuje się do: definiowania typów okrojonych, zakresowych definiowania granic wymiarów liniowych struktur danych tworzenia odwołań do podtablic, wycinków sterowania przebiegiem instrukcji iteracyjnych skracania zapisu pewnych literałów złożonych.

Definiowanie zakresu Zdefiniowanie zakresu w kodzie źródłowym składa się z określenia dwóch wybranych wartości pewnego typu bazowego: wartości początkowej (mniejszej) wartości końcowej (większej). Wartości graniczne mogą zostać zapisane jako: literały wyrażenia stałe. Od powyższych zasad istnieje odstępstwo w przypadku definiowania zakresu dla sterowania przebiegiem instrukcji iteracyjnej. W tym przypadku wartość początkowa – jeżeli dany język programowania dopuszcza taką sytuację – może być większa od wartości końcowej, a granice przedziałów zwykle nie muszą być wartością znaną na etapie kompilacji, lecz mogą być wyznaczane w trakcie wykonywania programu na podstawie obliczeń.

Przykład w języku Pascal: type miesiąc=1..12; {zakres od 1 do 12 liczb całkowitych} var i : miesiąc; …

W wielu językach istnieją pewne ograniczenia dotyczące typu bazowego dla którego można stosować zakresy. Np. w języku Pascal, w kontekstach kodu źródłowego, w których stosuje się zakresy, dopuszcza się aby typem bazowym był wyłącznie jeden z typów porządkowych.

Zapis zakresów + Zapis zakresów w językach programowania sposób zapisu języki programowania miejsce stosowania w1..w2 Pascal definicja typu okrojonego, definiowanie granic indeksów tablic Modula-2 definicja typu okrojonego, w literale zbiorowym, bitowym Ada instrukcja iteracyjna, wycinek tablicy – podtablica Perl, D, Windows PowerShell wycinek tablicy – podtablica range w1..w2 Ada definicja podtypu/typu okrojonegow1 to w2 Pascal, Ada, BASIC instrukcja iteracyjna Visual Basic (Visual Studio 2008) instrukcja iteracyjna, zapis skrócony listy wartości w2 downto w1 Pascal instrukcja iteracyjna w1 to: w2 Smalltalk konstruktor klasy range(w1,w2) Python, PHP instrukcja iteracyjna w1,w2 Fortran instrukcja iteracyjna from w1 by w2 Algol 68 instrukcja iteracyjna w1:w2[:step] Fortran, Python, S-Lang wycinek tablicy – podtablica w1:w2 MATLAB wycinek tablicy – podtablica, wyrażenie w1:w2 Icon, Snobol wycinek łańcucha, listy w1 w2 Common Lisp wycinek tablicy – podtablica

Zakresy w zastosowaniach Definiowanie typów okrojonych

Typ okrojony definiuje się jako ograniczenie ciągłe dostępnych wartości pewnego typu bazowego, stosując w jego definicji zapis zakresu.

Przykład w języku Ada: subtype miesiac is INTEGER range 1..12;

Definiowanie granic indeksów W definicjach struktur danych zakres definiujący granice indeksów ustala ilość elementów danej struktury (i tym samym wielkość pamięci jaką musi zarezerwować translator) określa sposób odwoływania się (identyfikowania) do poszczególnych, pojedynczych elementów.

Tak jest np. w języku Pascal, w którym indeksy mogą być danymi typu porządkowego (z wyjątkiem Longint), np. type sp=array[1..12] of Real; Nie wszystkie języki dopuszczają taki sposób zapisu indeksów. W pewnych językach jednak wartość początkowa zakresu może być narzucona, nie definiuje się indeksów w postaci zakresu lecz liczbę elementów struktury danych, np. języki C i Visual Basic, a zakres indeksów liczony jest od wartości dolnej narzuconej przez język, np. od 0 do LICZBA_ELEMENTÓW – 1; lub od 1 do LICZBA_ELEMENTÓW.

Odwołania do podtablic Odwołania takie występują w niewielu językach programowania, częściej w systemach obliczeniowych. W tym przypadku zakres indeksuje określoną tablicę tworząc pewną nową, mniejszą podtablicę, wycinek. Taka konstrukcja może występować w wyrażeniach, na tych samych zasadach obowiązujących w danym systemie co tablica macierzysta. Jeszcze rzadziej występuje konstrukcja pozwalająca wybrać w takim odwołaniu krok – czyili wybrać co drugi, trzeci, ... n-ty element.

Sterowanie instrukcją iteracyjną Zakres w instrukcji iteracyjnej zdeterminowany jest przez pewien zakres określający ilość powtórzeń iteracji. Zakres ten określa również wartości, które przyjmuje pewna zmienna sterująca. W tym przypadku konkretny algorytm może również wymagać definiowania: zakresów odwrotnych, tj. takich w których wartość początkowa jest większa od wartości końcowej, tak aby zachować wymaganą kolejność przypisywanych do zmiennej sterującej wartości – taka konstrukcja jest dostępna w większości języków programowania zdefiniowania kroku – dostępna w pewnych językach.

Przykład w języku Pascal: for i=10 downto 1 do …

Skracanie zapisu Zakres może być również wygodnym sposobem skrócenia zapisu literałów złożonych, np. tablicowych, zbiorowych, list itp. Zastosowanie zakresu spowoduje, że do takiego złożonego literału zostaną włączone wszystkie wartości objęte przez wymieniony zakres.

Przykład w języku Modula-2: VAR a : BITSET (* ustawienie (na wartość 1), bitów nr: 1, 3, 4, 5, 6, 7, 8, 12, 14 *) a:={1, 3..8, 12, 14};

Takie rozwiązania może również stosować w instrukcji wyboru.

Przykład w języku Visual Basic: Select Case Zmienna Case 1 ... Case 2, 5 To 10, 12, 16 To 20 ... Case Else ... End Select

Bibliografia Jan Bielecki, Turbo C z grafiką na IBM PC, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, Seria: Mikrokomputery, Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., , ISSN 0867-6011 Niklaus Wirth, Modula-2, Wydawnictwa Naukowo-Techniczne, Warszawa 1987, Seria: Biblioteka Inżynierii Oprogramowania, A. Nico Habermann, Dewayne E. Perry, Ada dla zaawansowanych, Wydawnictwa Naukowo-Techniczne, Warszawa 1989 r., seria: Biblioteka Inżynierii Oprogramowania, Ryszard K. Kott, Krzysztof Walczak. Programowanie w języku Fortran 77, Wydawnictwa Naukowo-Techniczne, Warszawa 1991,

Zobacz też Typ okrojony Przedział (matematyka)

Kategoria:Konstrukcje programistyczne