LINUX.ORG.RU
ФорумTalks

Шаблоны в программировании


0

0

В каких языках программирования используются (использовались) шаблоны (про с++ знаю) и похожие на них сущности (малоли такие существуют, не плюсами едиными жив человек)

★★

В Жабе generics но Жаба это такой C++ только лучше, в питоне они не нужны, в перле они не нужны, в руби они не нужны, в окамле не нужны.

Не нужны по той причине что в этих языках ты можешь передавать и хранить все что угодно, важно чтобы это все что угодно имело нужные имена (тип) случае последующего использования.

dissident ★★
()

Если имеються в виду плюсовые templates, то в плюсах, джаве (хотя там и без них можно обойтись для обобщенного программинга), и по-моему в C# (хотя тут могу и ошибаться).

Если же имеються в виду шаблоны проектирования а-ля GOF Patterns - то почти к любому оо-языку их привязать можно.

Nagwal ★★★★
()
Ответ на: комментарий от Nagwal

>Если же имеються в виду шаблоны проектирования а-ля GOF Patterns - то почти к любому оо-языку их привязать можно.

не, имеются ввиду именно шаблоны в языках.

насчет жабы и шарпа - понял, а чтонить древнее есть (времен smalltal'а и симулы)

ale ★★
() автор топика

defmacro в лиспе есь. Ещё древнее. Луче пока нигде не сделали.

bugmaker ★★★★☆
()

Добавлю ADA

anonymous
()
Ответ на: комментарий от anonymous

> Жабе до плюсовых шаблонов как плюсовым шаблонам до defmacro
Обоснуй. И создай в плюсах виртуальную функцию-шаблон. А теперь создай в Жабе. А еще иногда бывает полезным заглянуть в .h файлы из STL'а и поужасаться. Неудивительно что мало какой parser в состоянии эту сложность правильно разобрать и предоставить редактору нормальной автокомплит.

PS Да это немного разные вещи, в плюсах это все происходит в момент компиляции, в Жабе "динамически" но это скорее аргумент скорости выполнения и только.

dissident ★★
()

всем спасибо за информацию. и еще вопрос: я так понимаю, что в джаве есть так же как и в плюсах стандартная библиотека шаблонов (или как она там называется в джаве), если да - то есть ли различные её реализации (например как в плюсах: STL и QTL (http://doc.trolltech.com/3.3/qt-template-lib.html))

зы а в gtk кстати есть свои стандартные шаблоны?

ale ★★
() автор топика
Ответ на: комментарий от ale

> всем спасибо за информацию. и еще вопрос: я так понимаю, что в джаве
> есть так же как и в плюсах стандартная библиотека шаблонов
Начиная с Жабы 1.5 все контейнеры (типа там LinkedList) принимают синтаксис в ключе

LinkedList<Integer> l = new LinkedList<Integer>();

То есть теперь не надо делать как раньше:

LinkedList l = new LinkedList();
l.pushBackOrSmth(new Integer(2));
((Integer)l.getBackOrSmth())

C этими бесконечными кастингами туда сюда.

Только там были какие-то проблемы с таблицами generic'ов но что и как уже хоть убей не помню.

dissident ★★
()
Ответ на: комментарий от satanic-mechanic

Возможно, уже просто не помню. Там вроде бы есть type inherence. Но 
сути дела это не меняет:

=== Cut ===
muf@cocaine:~/zzz$ cat test.ml
class wtfA =
object
  method meth = 2
end;;

class wtfB =
object
  method meth = 2
end;;

let f x = x#meth and a = new wtfB and b = new wtfB;;

let a = new wtfA;;
let b = new wtfB;;

print_int (f a);
print_int (f b);
flush stdout;
muf@cocaine:~/zzz$ ocamlc test.ml
muf@cocaine:~/zzz$ ./a.out
22
=== Cut ===

Хотя конечно ты прав в том ключе что там как-то иначе, то есть
в тех случаях когда в каком-нибудь питоне будет все в порядке
в окамле можно будет получать всякие expression has type Bool
but here is used with type Bool.

Тут f определилась как:
#   val f : < meth : 'a; .. > -> 'a = <fun>

'a это насколько я помню "все что угодно", то есть да
тут иначе не по именам, type inherence + полиморфизм
объектов

PS Не знаю почему но мне этот язык просто физически
противен...

dissident ★★
()
Ответ на: комментарий от dissident

> let f x = x#meth and a = new wtfB and b = new wtfB;;
Тут конечно a = new wtfA, иначе пример не имеет смысла, но ничего не изменится, все продолжает работать.

dissident ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.