我已经阅读了一些关于声明/函数编程(语言)的文章,尝试过Haskell以及自己编写的文本.从我所看到的,函数式编程比传统的命令式风格有几个优点:
生产力提高(例如:Erlang)
命令式编程是一个非常古老的范例(据我所知),可能不适合21世纪
为什么使用功能语言的公司或程序仍然如此"罕见"?
为什么在查看函数式编程的优点时,我们仍在使用命令式编程语言?
也许它在1990年还为时尚早,但今天呢?
我被邀请到我大女儿的幼儿园小组谈话并回答孩子们关于我职业的问题.该组有26名4-6岁的孩子,另外还有3名教师,他们对编程和IT本身有任何相关的恐惧,但他们大胆地学习新的技巧.我会有大约20-30分钟,没有投影仪或任何东西.他们有一台旧电脑,看起来可能是486,我甚至不确定它是否正常运行(更新:它不是).
我的研究发现了很好的早期线程,有很多好的提示:
我的情况与上述情况不同:后者与年龄较大的儿童有关,而第一种情况则是与单个孩子(或老年人)交谈 - 一组20人是完全不同的挑战.
我怎样才能以有趣的方式教孩子们和他们的老师有关编程的知识?
感谢所有惊人的答案,伙计:-)我认为接受单一答案并不合理,但我最喜欢Jim,就像大多数SOers显然那样.然而,许多其他答案包含有用的提示和想法(其中一些我肯定会在未来的职业生涯中用于学校......).
我整理了一个粗略的计划:
n用一条指令准备三明治这是我的计划 - 我很确定它会变得非常不同,所以我会根据情况即兴发挥.演讲安排在大约2周的时间内 - 我将在事后更新帖子,并告诉它实际上是怎么回事......
最后演示的那一天到了......简而言之,一切都很顺利,这是一个巨大的成功:-)
这一次,这群人变得非常焦躁和精力充沛,所以谈话偶尔会变得有些混乱.我不得不缩短它并进入Big Sandwich Maker Show.正如吉姆所说,孩子们喜欢它.
但是有一种不可预见的副作用:在第一片面包最终准备好之后,每个人都想吃!所以有一段时间 - 我试图跟上对话并解释更多关于节目的问题 - 我们不得不与幼儿园老师安装一种紧急服务线来制作大量的果酱面包并喂饱饥饿的人群(这只是一半)早餐后一小时,记录:-).然后我们用完了面包,这显然意味着演示的结束.孩子们注意到可怜的电脑踩到了一块破坏了袜子的橘子酱后,最大的一阵笑声爆发了:-)
老师们自己也给人留下了非常深刻的印象 - 从反馈来看,这是迄今为止这个小组中最好,最有趣的职业日.再次感谢大家的好主意!
可以改进的事情(下次):
但总的来说,我对结果非常满意.而且我相信孩子们得到了核心信息:作为一名程序员,如果你避免造成混乱,你可以制作你的面包(即使是橘子酱:-)
我继承了Junit测试的负载,但是这些测试(除了大多数不工作之外)是实际单元测试和集成测试(需要外部系统,db等)的混合.
所以我试图想出一种方法来实际将它们分开,这样我就可以很好地快速运行单元测试,然后进行集成测试.
选项是......
将它们拆分为单独的目录.
移至Junit4(从v3开始)并注释类以将它们分开.
使用文件命名约定来告诉类是什么,即AdapterATest和AdapterAIntergrationTest.
3存在Eclipse可以选择"在所选项目/包或文件夹中运行所有测试"的问题.因此,只需运行集成测试就很难了.
2:冒着开发人员可能开始在单元测试类中编写集成测试的风险,它只会变得混乱.
1:似乎是最好的解决方案,但我的直觉说必须有一个更好的解决方案.
所以这就是我的问题,你如何分解集成测试和适当的单元测试?
我们可以使用以下命令替换批处理文件中的字符串
set str="jump over the chair"
set str=%str:chair=table%
Run Code Online (Sandbox Code Playgroud)
这些线条工作正常,并将字符串"跳过椅子"更改为"跳过桌子".现在我想用一些变量替换字符串中的"chair"一词,我不知道该怎么做.
set word=table
set str="jump over the chair"
??
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
有没有比在IntelliJ中的类源文件中重新排序方法更简单的方法,而不是手动剪切和粘贴代码?现在我经常在重构遗留代码时需要这个,例如在源代码中移动相关的方法.
在Eclipse AFAIK中,有一个类似于IntelliJ的Structure视图的视图,我可以在其中拖放方法.但是,这在IntelliJ中不起作用,我也无法从其帮助中找到任何提示.
我使用IntelliJ 9.0.2是具体的.
我正处于一个非常重视单一责任原则的项目中.我们有很多小班,事情很简单.但是,我们有一个贫血的领域模型 - 我们的任何模型类都没有行为,它们只是属性包.这不是对我们设计的抱怨 - 它实际上看起来效果很好
在设计评审期间,只要将新行为添加到系统中,SRP就会被引出,因此新行为通常会在新类中结束.这使得事情很容易被单元测试,但我有时会感到困惑,因为它感觉就像将行为拉出相关的地方.
我正在努力提高我对如何正确应用SRP的理解.在我看来,SRP反对添加与一个对象共享相同上下文的业务建模行为,因为该对象不可避免地最终要么做多个相关的事情,要么做一件事但是要知道改变形状的多个业务规则其产出.
如果是这样,那么感觉最终结果是一个贫血领域模型,这在我们的项目中肯定是这样.然而,贫血领域模型是一种反模式.
这两个想法可以共存吗?
编辑:一些上下文相关的链接:
SRP - http://www.objectmentor.com/resources/articles/srp.pdf
贫血领域模型 - http://martinfowler.com/bliki/AnemicDomainModel.html
我不是那种喜欢找先知并遵循他们所说的福音的开发者.所以我没有提供这些链接,作为说明"这些是规则"的方式,只是作为两个概念的定义来源.
当我尝试编译这个:
public static Rand searchCount (int[] x)
{
int a ;
int b ;
...
for (int l= 0; l<x.length; l++)
{
if (x[l] == 0)
a++ ;
else if (x[l] == 1)
b++ ;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
Rand.java:72: variable a might not have been initialized
a++ ;
^
Rand.java:74: variable b might not have been initialized
b++ ;
^
2 errors
Run Code Online (Sandbox Code Playgroud)
在我看来,我在方法的顶部初始化它们.什么出错了?
我对Liskov替换原则的理解是,对于派生类,基类的某些属性是真的或某些实现的基类行为.
我想这意味着当一个方法在基类中定义时,它永远不应该在派生类中被覆盖 - 因为那么替换基类而不是派生类会产生不同的结果.我想这也意味着,拥有(非纯)虚拟方法是件坏事吗?
我想我可能对这个原则有错误的理解.如果我不这样做,我不明白为什么这个原则是好的做法.谁可以给我解释一下这个?谢谢
liskov-substitution-principle design-principles solid-principles
是否有更好的方法将集合附加到另一个集合而不是迭代每个元素?
我有 :
set<string> foo ;
set<string> bar ;
.....
for (set<string>::const_iterator p = foo.begin( );p != foo.end( ); ++p)
bar.insert(*p);
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?
java ×3
oop ×2
batch-file ×1
c++ ×1
children ×1
command-line ×1
composition ×1
inheritance ×1
insert ×1
junit ×1
junit4 ×1
liskov-substitution-principle ×1
methods ×1
refactoring ×1
set ×1
testing ×1
unit-testing ×1
variables ×1