Trochę się tu sam wykluczasz. Albo jest obliczana raz, albo zależy od przypadku.
Nie - liczba iteracji pętli For obliczana jest raz, natomiast druga część zdania dotyczy pytania o wykorzystanie dodatkowej zmiennej lub nie, do przechowywania obliczonej długości;
Jeśli o Twój kod chodzi, to nawet się nie skompiluje; I jest za długi:
function GetCount(): Integer;
begin
Result := Length(arr) div 2;
end;
Mniejsza o to; Ogólna zasada pisania dobrego kodu, tak jak wspomniałem wcześniej, zakłada stosowanie jak najmniejszej liczby instrukcji oraz alokacji jak najmniejszej ilości pamięci;
Więc jeśli omawiana długość macierzy potrzebna jest tylko i wyłącznie do określenia liczby iteracji pętli to nie deklarujemy zmiennej i w nagłówku pętli wywołujemy odpowiednią funkcję - np. Length czy High;
Niczego nie zmienia fakt, iż wyliczenie długości czy wielkości jest bardziej skomplikowane; Bo nawet najdłużej i najbardziej skrupulatnie obliczony wynik, jeśli ma zostać użyty tylko w jednym miejscu - zmiennej nie potrzebuje; Chyba że ze względu na czytelność;
@karpov - tytuł wątku sugeruje pytanie o ogólne zasady pisania optymalnego kodu; Natomiast podany przykład sięga aż do podstaw podstaw programowania, czyli ograniczania ilości kodu i potrzebnych instrukcji;
W razie czego polecam ten artykuł na początek - http://www.dzyszla.aplus.pl/porada-13.html
PS: Pasowałoby też zorientować się, co używany kompilator robi podczas optymalizacji; Bo może się okazać, że kompilator i tak wszystko zrobi po swojemu.