Портативные языковые примеры программ - PullRequest
2 голосов
/ 07 февраля 2010

В данный момент я изучаю Objective-C 2. Я знаю, что он интенсивно используется разработчиками Mac, но сейчас мне больше интересно изучать язык, чем фреймворки для разработки на Mac OS X / айфон (кроме фонда). Для этого я хочу написать несколько промежуточных * консольных приложений, но я застрял на идеях.

Большинство примеров - это что-то вроде «Записать класс Fraction, который имеет методы получения / установки и функцию печати», что не очень сложно, если исходить из фона C ++. Мне бы хотелось несколько общих примеров программ, но я не хочу, чтобы они включали какие-либо подробности реализации Objective-C. Я хочу выяснить структуру программы / написать свои собственные интерфейсы и выучить язык оттуда.

В заключение: мне любопытно, какие примеры программ рекомендуют программисты Objective-C для изучения языка.

Примером «промежуточного» приложения может быть что-то вроде «Напишите программу, которая берет URL из командной строки и возвращает количество вхождений определенного слова в возвращаемые данные:

example -url www.google.com -word search

Ответы [ 2 ]

2 голосов
/ 07 февраля 2010

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

Запятнав руки в тестовой среде (GHUnit в этом отношении), я смог узнать гораздо больше о языке, чем мог бы "традиционным" способом. Конечно, вам понадобится небольшой проект с домашним животным, иначе такой подход не имеет смысла.

Я не думаю, что ваш пример - очень хорошая идея, поскольку он требует, чтобы вы связывались с http-соединениями, ресурсами и т. Д., Что в конце концов немного специфично для фреймворка. Разбор текстового файла будет немного проще в этом отношении. Использование инфраструктуры модульного тестирования имеет следующие преимущества:

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

Вам также следует изучить реализацию инфраструктуры тестирования, поскольку платформы тестирования всегда требуют работы с метаданными в некоторой степени. Каркасы тестирования часто используются вместе со средами изоляции. Они в основном создают объекты во время выполнения, которые соответствуют определенным интерфейсам и выступают в качестве заменителей для конкретных объектов. Рассматривая их реализацию, вы узнаете о манипуляциях во время выполнения, которые можно выполнить в Objective-C (ключевое слово: Method-Swizzling)

2 голосов
/ 07 февраля 2010

«Project Euler» является стандартным ответом для такого рода вещей, но у меня возникает ощущение, что вас меньше интересует, когда вам говорят о реализации алгоритмических вещей (так как эти знания легче переносить между языками) и больше интересуетесь мини-проекты, которые познакомят вас с основными библиотеками. Это справедливо?

Если это так, ИМО, вы должны знать основы того, как сделать следующее со стандартными библиотеками языка, которые вы надеетесь использовать для серьезной работы:

  1. Стандартный IO
  2. Сетевой ввод-вывод
  3. Дисковый ввод-вывод и навигация по файловой системе
  4. Утилиты регулярных выражений
  5. Структурированные данные (библиотеки XML и библиотеки CSV, если они существуют)

Проблемы программирования, которые я бы порекомендовал:

  1. Похоже, вы уже сделали это.
  2. Очень простой прокси - что-то наподобие того, что вы описали в своем посте, но он прослушивает порт для сообщения, содержащего URL-адрес, а не принимает его в командной строке, а также возвращает результаты тому, с кем связался по сети. вместо вывода в stdio. [Очевидно, что для этого вам нужно иметь машину за соответствующим брандмауэром!]
  3. То, что принимает путь к каталогу и рекурсивно подсчитывает количество строк, содержащихся в его дочерних элементах. (Итак, получите список каталогов, откройте каждый дочерний файл и посчитайте количество разрывов строк. Затем откройте каждый из его дочерних каталогов, получите их списки, ...) Записывайте любые обнаруженные ошибки (например, нет прав на чтение) в разумных пределах. путь. Запишите окончательные результаты в файл в прилагаемом каталоге.
  4. Обычно, если я достаточно разбираюсь в языке, я сталкиваюсь с некоторой проблемой, для которой, естественно, я использую регулярные выражения. Я предполагаю, что то же самое относится и к вам, и пока что выдумаю этот элемент.
  5. Получите StackOverflow.com и [поместив его в модель DOM и перейдя по нему], определите, остается ли этот вопрос на первой странице.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...