Управляющая логика

Возможность управления логикой исполнения скрипта позволяет сделать ваши скрипты существенно более гибкими и полезными. Существуют два основных способа управления логикой исполнения скрипта: условные конструкции, которые позволяют выполнять команды при соблюдении определенных условий, и циклы, позволяющие выполнить набор команд заданное количество раз.
Условные конструкции
В командных сценариях имеется два широко распространенных вида условных конструкций: утверждения if и утверждения case. Конструкция if проверяет, является ли заданное условие истинным или ложным. Если условие истинно, то выполняется блок команд then, в противном же случае исполняется блок else.
Дополнительные возможности написания скриптов на Perl, Python и Ruby
Написание командных сценариев оболочки - это чрезвычайно мощная возможность, очень полезная для выполнения множества задач. Однако, помимо встроенных команд оболочки, существует множество мощных и гибких языков написания сценариев, превосходящих возможности оболочки. Leopard обеспечивает встроенную поддержку трех наиболее мощных и гибких языков командных сценариев, использующихся на сегодняшний день: Perl, Python и Ruby. Эти языки часто называют интерпретируемыми языками программирования или языками сверхвысокого уровня. Вследствие широты их функциональных возможностей по сравнению с обычными языками командных сценариев, полностью описать особенности программирования на этих языках в рамках одной главы просто невозможно. Хотя в изучении и использовании эти языки относительно просты, но описание каждого из них потребует отдельной книги, а на практическое изучение любого языка всегда следует затратить и время и усилия. Тем не менее, тем из вас, кто уже знаком с этими языками, а также тем, кто желает расширить свой программистский репертуар, будет полезно ознакомиться с материалами данного раздела. Здесь мы вкратце опишем возможности упомянутых языков и особенности их применения в Mac OS X.
Каждый из обсуждаемых языков программирования обладает рядом преимуществ по сравнению с традиционными компилируемыми языками наподобие С, С++, Objective-C и Java. К числу этих преимуществ относятся простота в использовании, переносимость, а также немедленная обратная связь. Поскольку все обсуждаемые языки представляют собой языки командных сценариев, все, что вам потребуется для того, чтобы начать их использование - это текстовый редактор. Все языки бесплатны и поддерживаются на множестве платформ и устройств. Обратной стороной медали является то, что интерпретируемые языки наподобие Perl, Python и Ruby обладают и рядом недостатков по сравнению с языками программирования, использующими высокооптимизированные компиляторы. Так, языки командных сценариев не так хорошо, как компилируемые языки, подходят для решения низкоуровневых задач программирования. Наконец, если вам требуется распространять написанные вами скрипты, вы должны будете полностью раскрывать весь исходный код. Именно по этой причине языки командных сценариев менее пригодны для написания коммерческих продуктов, нежели компилируемые языки.
Примечание
Производительность также представляет собой "скользкую" тему. Хорошо оптимизированная программа, написанная на компилируемом языке, всегда работает намного производительнее, чем программа на интерпретируемом языке. Однако, благодаря возможностям кэширования, при последующих исполнениях интерпретируемой программы она может догнать компилируемую программу по скорости исполнения. Кроме того, благодаря технологическому прогрессу в области аппаратных средств, реальный разрыв по производительности между компилируемыми и интерпретируемыми программами быстро сокращается. Хотя, справедливости ради, следует отметить, что полностью этот разрыв не будет ликвидирован никогда. Что интересно, некоторые технологии программирования, например, Java и некоторые технологии.NET, имеют как компилируемые, так и интерпретируемые реализации. Это может навести на мысль, что данные технологии будут иметь общие недостатки компилируемых и интерпретируемых языков, например, такие как сложность разработки, повышенные временные затраты на реализацию проектов, а также неоптимальная производительность. Хотя отчасти это и правда, но такие технологии имеют и свои преимущества, к числу которых относятся переносимость и возможность обфускации кода коммерческих приложений, не говоря уже обычно о том, что если язык может быть переносимым, он таким и является.