LINUX.ORG.RU

История изменений

Исправление geekless, (текущая версия) :

[(value.rjust, value.ljust)[align_left==True](size) for (value, size, align_left) in map(None, row, col_size, [True, True])]

Оригинально, но по-прежнему читабельно с трудом. По сути интересное упражнение на тему «как бороться с языком чтобы делать то, для чего он не предназначен».

Чисто ради интереса я переписал свой алгоритм слово в слово на Io.

col_sizes := data transpose map(map(size) max)
data map(
	zip(col_sizes, [true, true]) map([value, size, align_left],
		if (align_left, value ljust(size), value rjust(size))
	) join(" | ")
) join("\n") print

(На самом деле, там из коробки нет transpose и zip, а map нас не поймёт, если вот так передавать список имён: [value, size, align_left]. Но предположим, что у нас Io с блэкджеком и более фичастой стандартной библиотекой.)

И хотя лаконичность повысилась, читабельность значительно упала. Потому что в руби легко вычленяются отдельные фрагменты-шаблоны, в чем сильно помогают те самые фигурные скобки и «пайпы», от которых так страдает KRoN73. А Io, где любой фрагмент кода может означать что угодно, и всё выглядит одинаково, читать намного труднее.

Исходная версия geekless, :

[(value.rjust, value.ljust)[align_left==True](size) for (value, size, align_left) in map(None, row, col_size, [True, True])]

Оригинально, но по-прежнему читабельно с трудом. По сути интересное упражнение на тему «как бороться с языком чтобы делать то, для чего он не предназначен».

Чисто ради интереса я переписал свой алгоритм слово в слово на Io.

col_sizes := data transpose map(map(size) max)
data map(
	zip(col_sizes, [true, true]) map([value, size, align_left],
		if (align_left, value ljust(size), value rjust(size))
	) join(" | ")
) print

(На самом деле, там из коробки нет transpose и zip, а map нас не поймёт, если вот так передавать список имён: [value, size, align_left]. Но предположим, что у нас Io с блэкджеком и более фичастой стандартной библиотекой.)

И хотя лаконичность повысилась, читабельность значительно упала. Потому что в руби легко вычленяются отдельные фрагменты-шаблоны, в чем сильно помогают те самые фигурные скобки и «пайпы», от которых так страдает KRoN73. А Io, где любой фрагмент кода может означать что угодно, и всё выглядит одинаково, читать намного труднее.