Krótka odpowiedź:
Jednym z elementów, które sprawiają, że ludzie mówią, że funkcjonalny kod programowania jest trudny do odczytania, jest to, że preferuje bardziej zwartą składnię.
Długa odpowiedź:
Sam programowanie funkcjonalne nie może być czytelne ani nieczytelne, ponieważ jest to paradygmat, a nie styl pisania kodu. Na przykład w języku C # programowanie funkcjonalne wygląda następująco:
return this.Data.Products
.Where(c => c.IsEnabled)
.GroupBy(c => c.Category)
.Select(c => new PricesPerCategory(category: c.Key, minimum: c.Min(d => d.Price), maximum: c.Max(d => d.Price)));
i zostałby uznany za czytelny przez każdą osobę z wystarczającym doświadczeniem w Javie, C # lub podobnych językach.
Z drugiej strony, składnia językowa jest bardziej zwarta dla wielu języków funkcjonalnych (w tym Haskell i F #) w porównaniu do popularnych języków OOP, dając pierwszeństwo symbolom, a nie słowom zwykłym angielskim.
Dotyczy to także języków poza FP. Jeśli porównasz popularne języki OOP z niektórymi mniej popularnymi, które zwykle używają więcej angielskich słów, te ostatnie będą łatwiejsze do zrozumienia dla osób bez doświadczenia w programowaniu.
Porównać:
public void IsWithinRanges<T>(T number, param Range<T>[] ranges) where T : INumeric
{
foreach (var range in ranges)
{
if (number >= range.Left && number <= range.Right)
{
return true;
}
}
return false;
}
do:
public function void IsWithinRanges
with parameters T number, param array of (Range of T) ranges
using generic type T
given that T implements INumeric
{
for each (var range in ranges)
{
if (number is from range.Left to range.Right)
{
return true;
}
}
return false;
}
W ten sam sposób:
var a = ((b - c) in 1..n) ? d : 0;
można wyrazić w wyimaginowanym języku jako:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Kiedy krótsza składnia jest lepsza?
Podczas gdy bardziej złożona składnia jest łatwiejsza do zrozumienia dla początkującego, bardziej zwarta składnia jest łatwiejsza dla doświadczonych programistów. Krótszy kod oznacza mniej znaków do pisania, co oznacza większą wydajność.
Szczególnie nie ma sensu zmuszanie osoby do wpisania słowa kluczowego w celu wskazania czegoś, co można wywnioskować ze składni.
Przykłady:
W PHP musisz pisać function
przed każdą funkcją lub metodą, bez konkretnego powodu.
Ada zawsze mnie przerażała za zmuszanie programistów do pisania wielu angielskich słów, zwłaszcza, że nie ma prawidłowego IDE z autouzupełnianiem. Ostatnio nie korzystałem z Ady, a ich oficjalny samouczek nie działa, więc nie mogę dać przykładu; jeśli ktoś ma przykład, proszę zmodyfikować moją odpowiedź.
Składnia 1..n
używana w wielu FP (i Matlabie) może być zastąpiona przez between 1, n
lub between 1 and n
lub between (1, n)
. Słowo between
kluczowe znacznie ułatwia zrozumienie dla osób, które nie znają składni języka, ale mimo to dwie kropki są znacznie szybsze.