(Я буду использовать здесь «А» вместо комментария, «'» вместо знака символа.)
Ну, я разрабатывал APL в течение года, я использовал только Aplusdev.org.
Вам даже не нужно больше. Хитрость заключается в том, чтобы попытаться мыслить в стиле ООП. У вас должны быть - если я хорошо помню - структурированные поля, используемые как данные класса, такие как {'attribute1 'attribute2, {value,value2}}, чтобы вы могли легко выбрать их, например obj.attribute1
в С++. (здесь атрибут Pick объекта, используйте только в функциях класса:))
Кроме того, используйте функции пространства имен:
namespace_classname.method(this, arg1)
namespace_classname._private_method(this, arg1, arg2)
и множество простых функций инструментов вместо изящных длинных строк. Падение производительности незначительное, вы можете оптимизировать позже, скажем, для массивов, как только увидите, что что-то может быть быстрее.
И прежде всего: подумайте о Matlab и Mathematica без циклов for! :) Очень помогает.
Мои предложения для надежного, поддерживаемого кода:
используйте обширный набор служебных функций вместо обмана с этими нечитаемыми символами, чтобы сделать ваш код всегда точным.
блоки try-catch, есть встроенная обработка исключений, которую можно использовать здесь,
try_begin();
Пробный код, возможно, в дополнительных скобках, чтобы не забыть try_end() в конце.
try_end();
catch(sth, function_here);
можно красиво реализовать. (Вы увидите, ловить ошибки очень важно)
грубая проверка типов: реализовать стандарт и использовать для не так уж часто вызываемых функций... (вы можете поместить функцию с гибкими параметрами сразу после определения функции)
Синтаксис:
function(point2i, ch): {
typecheck({{'int, [1 2]}, 'char}); Сделайте несколько утверждений в typecheck...
// ваша функция находится здесь
}
лямбда-функции могут быть очень эффективными, вы можете немного поразмыслить, чтобы получить лямбда-выражения.
всегда сообщайте о возврате с пометкой "возврат"!
Модульные тесты, основанные на try-catch, тестируют каждую написанную вами функцию.
Я также использовал много 'apply' и 'map' из mathematica, реализуя свою собственную версию, здесь они очень-очень эффективны.
Я написал Matlab, думая, что здесь вы можете иметь список структурированных полей (=данные класса) в переменной. Вы напишете их много, если захотите оставить вещи без циклов (а вы хотите, поверьте мне). Для этого вам нужно иметь стандартное соглашение об именах, скажем, во множественном числе:
namespace_class.method(объекты, arg1, arg2)
В заключение: также я написал inputBox и messageBox наподобие тех, что написаны на Javascript или VisualBasic, они очень упростят объединение простых инструментов или проверку состояний. Единственная загвоздка messageBox в том, что он не может приостановить поток функций, поэтому вам нужно
AA documentation of f1
f1():
{
A do sth
msgbox.call("Hi there",{'Ok, {'f2}});
}
f2():
{
A continue doing stuff
}
Вы можете написать автодокументы в bash с комбинацией gawk/sed, чтобы поместить их на веб-страницу. Также создание кода в формате HTML помогает при печати. ;)
Я надеюсь, что это был хороший план для правильного наращивания. Прежде чем писать собственные инструменты, попробуйте откопать доступные инструменты из унаследованной кодовой базы... функции часто даже 4 раза реализованы с разными именами из-за бардака того времени.
person
Barney Szabolcs
schedule
17.11.2012