语言 - 可移植示例程序

时间:2010-02-07 07:13:21

标签: objective-c

目前我正在学习Objective-C 2.我知道它被Mac开发人员大量使用,但我现在对学习语言的兴趣比在Mac OS X上开发的框架更感兴趣/ iPhone(基金会除外)。为了做到这一点,我想写一些中间*控制台应用程序,但我坚持想法。

大多数示例都是“编写具有getter / setter和打印函数的Fraction类”,这在C ++背景下并不是很具挑战性。我想要一些程序的通用示例,但我不希望它们包含任何Objective-C实现细节。我想弄清楚程序结构/编写我自己的界面并从那里学习语言。

总结:我很好奇Objective-C程序员为探索该语言而推荐的示例程序。

“中间”应用程序的一个例子就是“编写一个从命令行获取URL并返回返回数据中某个单词出现次数的程序:

example -url www.google.com -word search

2 个答案:

答案 0 :(得分:2)

“Project Euler”是对这类事情的标准回应,但我觉得你对被告知要实现算法的东西不太感兴趣(因为这种知识更容易在语言之间移植)并且更感兴趣miniprojects将使您熟悉核心库。这是公平的吗?

如果是这样,IMO,您应该了解如何使用您希望用于认真工作的标准语言库来完成以下操作:

  1. 标准IO
  2. 网络IO
  3. 磁盘IO并导航文件系统
  4. Regexp实用程序
  5. 结构化数据(如果存在,则为XML库和CSV库)
  6. 编程问题我建议那些:

    1. 听起来你已经这样做了。
    2. 一个非常简单的代理 - 类似于您在帖子中描述的内容,但是在端口上侦听包含URL的消息而不是在命令行上接收它,同样将结果返回给通过网络联系它的任何内容而不是输出到stdio。 [显然你需要让机器在适当的防火墙后面!]
    3. 获取目录路径并以递归方式计算其子项包含的行数的内容。 (因此,获取目录的列表,打开每个子文件并计算换行符的数量。然后打开其每个子目录,获取其列表,...)记录所遇到的任何错误(例如,没有读取权限)办法。将最终结果写出到提供的目录中的文件。
    4. 通常如果我用足够的语言进行处理,我会遇到一些问题,我自然会发现自己使用的是正则表达式。我会假设对你来说也是如此,现在就把这个元素归来。
    5. 获取StackOverflow.com,[并将其放入DOM模型并导航]确定此问题是否仍在首页。

答案 1 :(得分:2)

通过使用测试框架进行探索,我充分利用了Objective-C。我写了一篇关于它的简短blog post。您还应该围绕Objective-C使用的内存管理约定,引用计数需要一点时间来习惯,但如果责任明确分开,我的工作也很好(我也在我的博客上写过)。

通过在测试框架(GHUnit)上弄脏手,我能够以“传统”的方式学习更多关于语言的知识。当然,你需要一个小宠物项目,否则这种方法没有意义。

我不认为你的例子是一个非常好的主意,因为它要求你搞乱http连接,资源等,毕竟这是一个特定的框架。在这方面解析文本文件会更容易一些。使用单元测试框架具有以下优势:

  • 了解特定于平台的构建系统和部署详细信息
  • 被迫从头开始以松散耦合的方式开发组件
  • 从而探索语言的独特机制,可能需要新的或使已知的模式冗余(例如,类别使依赖注入过时等)。
  • 快速编译测试周期,减少在调试器前花费的时间
  • 结合源控制:无痛实验

您还应该研究测试框架实现,因为测试框架总是需要在某种程度上使用元数据。测试框架通常与隔离框架一起使用。它们基本上在运行时创建符合某些接口的对象,并充当具体对象的替身。查看它们的实现将教会您可以在Objective-C中完成的运行时操作(关键字:Method-Swizzling)