按产品、主题或内容类型过滤

(0 产品)

(130 主题)

(0 行业)

(2 类别)

第 1 - 59 条,共 59 条
显示内容简介 | 隐藏内容简介
查看结果
题目 none 类别 none 日期 none
函数式思维: 转换和优化
不同的函数式语言和框架具有许多相同的抽象和行为特征,但命名方式却有所不同。在这篇函数式思维文章中,系列作者 Neal Ford 通过改进算法和添加缓存功能,对上一期解决方案进行了优化,并阐述了每种语言或框架适应所需变更的方式。
技术文章 2012年 12月 11日
函数式思维: 函数设计模式,第 3 部分
Gang of Four 的解释器设计模式 (Interpreter design pattern) 鼓励在一个语言基础上构建一个新的语言来实现扩展。大多数函数式语言都能够让您以多种方式(如操作符重载和模式匹配)对语言进行扩展。尽管 Java 不支持这些技术,下一代 JVM 语言匀支持这些技术,但其具体实现细则有所不同。在本文中,Neal Ford 将探讨 Groovy、Scala 和 Clojure 如何通过以 Java 无法支持的方式来实现函数式扩展,从而实现解释器设计模式的目的。
技术文章 2012年 06月 11日
函数式思维: 函数设计模式,第 2 部分
设计模式仅表现为一种解决问题的方法,然而,如果您主要使用的是面向对象语言,那么您可能会想到设计模式。在本期的函数式思维中,Neal Ford 将阐述使用传统设计模式、元编程和函数式组合处理一个常见问题(接口不兼容)的各个解决方案。每种方法各有利弊,但是考虑解决方案的设计可以帮助您以一种新的方式来看待问题。
技术文章 2012年 05月 03日
函数式思维: 函数设计模式,第 1 部分
与人们的普遍看法相反,设计模式存在于函数式编程中,不过它们有时在外观和行为上不同于其面向对象的模式。在本期的函数式思维中,Neal Ford 探究了模式在函数范式中的表现方式,展示了各种解决方案的不同之处。
技术文章 2012年 03月 31日
函数式思维: 运用函数式思维,第 3 部分
系列文章 “函数式思维” 的作者 Neal Ford 将继续介绍函数式编程的构造和范例。您将了解 Scala 中的数字分类 (number-classification) 代码以及函数式世界中的单元测试。接下来,您将了解部分应用和局部套用 (currying),即两种简化代码重用的函数式方法,还将了解递归在函数式思维中发挥作用的方式。
技术文章 2011年 09月 07日
函数式思维: 以函数式的方式思考,第 1 部分
函数式编程因其生成错误少且产能高而受到越来越多的关注。但是很多开发人员仍然无法理解对于某些类型的任务来说,函数式语言是否更具优势。学习一个新语言的语法并不难,但学习另一种思维方式却比较难。在函数式思维专栏系列的第一部分中,Neal Ford 介绍了一些函数式编程的概念,并探讨了如何在 Java 与 Groovy 中应用。
技术文章 2011年 07月 25日
演化架构和紧急设计: 连贯接口
本期的演化架构和紧急设计继续讨论在紧急设计中捕获惯用模式的方法。发现一个可重用模式时,您应当将其与其余代码分离,然后捕获它。特定领域语言(DSL)提供许多可准确捕获数据和功能的方法。这个月,Neal Ford 将展示构建内部 DSL 的三种方法,以捕获惯用域模式。
技术文章 2010年 09月 07日
演化架构和紧急设计: 使用 DSL
至今,演化构架和紧急设计主要关注技术模式的紧急设计,本期将介绍使用特定领域语言(DSL)捕获领域惯用模式。系列作者 Neal Ford 用一个例子说明了该方法,显示了这种获取惯用模式的抽象样式的优势。
技术文章 2010年 07月 26日
演化架构与紧急设计: 对设计进行重构
本系列的早期文章讨论了单元测试如何引导您实现更好的设计。但是如果您已经具备大量的代码,那么如何从代码中发现隐藏的设计元素?上一期文章讨论了为您的代码构建结构化目标。在本期文章中,作者 Neal Ford 进一步拓展了这些主题,介绍了可用于重构并实现紧急设计的各种技术。
技术文章 2009年 07月 21日
演化架构与紧急设计: 语言、表达性与设计:第 1 部分
发现和积累惯用模式的能力对于紧急设计至关重要。对于设计而言同样十分重要的是代码的表达性。在本系列文章中,Neal Ford 分两部分介绍了表达性和模式的交集,通过惯用模式和正式设计模式阐释了这些概念。他用动态语言为 JVM 重构了一些经典的四人组(Gang of Four)模式,以说明表达性更好的语言如何使您看到被透明度不佳的语言遮挡的设计元素。
技术文章 2009年 09月 10日
演化架构与紧急设计: 语言、表达性与设计:第 2 部分
发现和积累惯用模式的能力对于紧急设计至关重要。对于设计而言同样十分重要的是代码的表达性。在本 系列文章的第 2 部分中,Neal Ford 将继续讨论表达性和模式的交集,通过惯用模式和正式设计模式阐释这些概念。他用动态语言为 JVM 重构了一些经典的四人组(Gang of Four)模式,以说明表达性更好的语言如何使您看到被透明度不佳的语言遮挡的设计元素。
技术文章 2009年 10月 27日
演化架构与紧急设计: 研究架构和设计
软件架构和设计曾引起了大量热议,但是并没有产生太多新的亮点。本文将发起新一轮的有关软件架构和设计替代方法的讨论,并开启了这个关于“演化架构和紧急设计”的系列文章。演化架构(evolutionary architecture)和紧急设计(emergent design)都是将重要的决策推迟到最后责任时刻(Last Responsible Moment)的敏捷技术。在本系列的第一期文章中,系列作者 Neal Ford 将定义架构和设计,然后指明了一些关于整个系列的基本概念。
技术文章 2009年 03月 17日
函数式思维: 对调度(dispatch)的反思
面向 Java 平台的下一代语言提供了比 Java 语言更灵活的方法调度机制。在这一期的 “函数式思维” 专题文章中,Neal Ford 将探讨 Scala 和 Clojure 等函数语言中的调度机制,展示执行代码的新的思维方式。
技术文章 2012年 09月 17日
Java 下一代: Groovy、Scala 和 Clojure
本文开启了一个崭新的 Neal Ford developerWorks 系列,该系列对三种下一代 JVM 语言进行了深入比较:Groovy、Scala 和 Clojure。在第 1 部分中,将了解这些语言的相似性和差异,不管您现在是否继续选择 Java 作为主要编程语言。
技术文章 2013年 07月 01日
Java 下一代: 克服同义词干扰
上一期 Java 下一代文章(“函数式编码风格”)对比和比较了 Scala、Groovy 和 Clojure 中的函数式编码风格。在本文中,系列作家 Neal Ford 将会更深入地剖析 Java 下一代语言中的过滤、映射和缩减(reduce)功能。文中提供的一系列简短的编码示例可帮助您整理这 3 种语言在命名这些重要的函数结构的方式上的比较容易混淆的区别。
技术文章 2014年 05月 08日
函数式思维: 为什么函数式编程越来越受关注
即使不打算立刻改用函数式语言(比如 Scala 或 Clojure),Java 开发人员也应该了解函数式范式。随着时间的推移,所有主流语言都将变得更加函数化;Neal Ford 将在本期文章中探讨其中的原因。
技术文章 2013年 07月 08日
使用 Eclipse 插件 Ruby Development Tools
本文介绍如何使用 Eclipse 插件 Ruby Development Tools(RDT),这个插件使 Eclipse 能够成为一流的 Ruby 开发环境。那些希望利用 Eclipse 社区丰富的基础设施来支持开发的 Ruby 开发人员会从本文中受益,对有兴趣使用 Ruby 的 Java 开发人员也会有所收获。
技术文章 2005年 12月 08日
Java 下一代: Groovy、Scala 和 Clojure 中的共同点,第 3 部分
本文是由三个部分组成的介绍 Clojure、Scala 和 Groovy 的共同点的系列文章的最后一篇,调查了这些语言如何处理异常、表达式和 null —— 这些都是 Java 语言容易出问题的地方。每种 Java 下一代语言都通过突出语言特征的独特实现消除了 Java 语言的瑕疵。
技术文章 2013年 06月 24日
函数式思维: Groovy 中的函数式特性,第 2 部分
凭借 Groovy,元编程 (metaprogramming) 和函数式编程形成了一个强有力的组合。了解元编程如何支持您为 Integer 数据类型添加方法,从而使您能够利用 Groovy 的内置函数式特性。学习如何使用元编程将 Functional Java 框架的丰富函数式特性集无缝地整合到 Groovy 中。
技术文章 2012年 02月 13日
函数式思维: Groovy 中的函数式特性,第 1 部分
随着时间的推移,语言和运行时为我们处理了越来越多琐碎的细节。函数式语言在这方面体现了它的趋势,而且现代的动态语言也采用了许多函数式特性,让开发者的工作变得更轻松。这期文章将介绍 Groovy 中的一些函数式特性,并将展示如何用递归隐藏状态和构建惰性列表。
技术文章 2011年 12月 27日
函数式思维: 耦合和组合,第 2 部分
技术文章 2011年 12月 01日
函数式思维: 不变性
不变性 (immutability) 是函数式编程的基石之一。本文主要讨论了Java 语言中的不变性的许多方面,并介绍了如何以传统的和新式的风格来创建不可改变的 Java 类。本文还展示了使用 Groovy 创建不可变类的两种方法,这两种方法摈弃了 Java 实现中的许多令人头疼的缺陷。最后您还要了解的是,何时适合使用这种抽象。
技术文章 2011年 10月 17日
函数式思维: 运用函数式思维,第 2 部分
函数语言和框架可以让运行时来控制繁琐的编码细节,如遍历、并发和状态。但这并不意味着无法在需要的时候收回控制。以函数式思维的一个重要方面是知道放弃多少控制,以及何时放弃。
技术文章 2011年 08月 03日
演化架构和紧急设计: 利用可重用代码,第 2 部分
在使用演化架构和紧急设计前几期中描述的技术发现代码中的紧急设计之后,下一步您需要一种获取和利用这些设计元素的方法。本文介绍了两种用于获取惯用模式的方法:将模式作为 APIs 予以捕捉;使用元程序设计方法。
技术文章 2010年 06月 24日
演化架构和紧急设计: 演化架构
这一期的演化架构和紧急设计将会解决演化架构相关的各种主题,包括设计和架构之间重要的区别(以及如何区分两者),您在创建企业级架构时遇到某些的问题,以及面向服务的架构中静态类型和动态类型的区别。
技术文章 2010年 03月 01日
演化架构与紧急设计: 积累惯用模式
本期将之前的演化架构与紧急设计文章中的紧急设计概念与一个案例研究相结合,展示如何发现、积累和利用代码中意料之外的设计元素。一旦理解了如何识别设计元素,便可以使用该知识改进代码的设计。紧急设计使您可以发现代码中意料之外但是已成为代码库重要部分的那些方面。
技术文章 2010年 01月 19日
演化架构与紧急设计: 通过指标进行紧急设计
软件指标可以帮助您寻找代码中隐藏的设计元素,让它们能够成为惯用模式。这一期的“演化架构与紧急设计”讲解如何使用指标和可视化发现被复杂性掩盖的重要代码元素。
技术文章 2009年 08月 06日
演化架构与紧急设计: 组合方法和 SLAP
如何在陈旧的代码库中找出隐藏的设计?本文讨论两种对于代码结构很重要的模式:组合方法和单一抽象层。对代码应用这些原则有助于找到以前隐藏的可重用资产,有助于把现有的代码抽象为成熟的框架。
技术文章 2009年 06月 12日
演化架构和紧急设计: 利用可重用代码,第 1 部分
识别出代码中的惯用模式后,下一步是积累和使用它们。理解设计与代码之间的关系有利于发现可重用的代码。本期的演化架构和紧急设计探索代码与设计的关系,使用表达性强的语言的重要性,以及重新考虑抽象风格的潜在价值。
技术文章 2010年 05月 12日
演化架构与紧急设计: 测试驱动设计,第 2 部分
测试只是测试驱动开发(TDD)的意外结果之一;如果正确地应用,TDD 能够改进代码的整体设计。“演化架构与紧急设计” 系列的这一期文章将介绍一个进一步扩展的示例,演示如何根据测试中显现的关注点进行设计。
技术文章 2009年 05月 08日
演化架构与紧急设计: 测试驱动设计,第 1 部分
大多数开发人员认为使用测试驱动开发(TDD)最有用的部分是测试。但是,正确地完成开发后,TDD 将改进代码的整体设计。演化架构与紧急设计系列的这一期文章将介绍一个进一步扩展的示例,演示如何根据测试中显现的关注点进行设计。测试只是 TDD 的次要部分;关键在于它如何优化代码。
技术文章 2009年 03月 27日
函数式思维: 耦合和组合,第 1 部分
每天都与特定的抽象(如面向对象)打交道,当它把您引向一个不是最佳的解决方案时,您几乎都无法察觉到。本文探讨代码重用中的面向对象思维的含义,并将它们与更加函数式的方案,如组合,进行比较。
技术文章 2011年 11月 28日
Java 下一代: Groovy、Scala 和 Clojure 中的共同点,第 2 部分
与 Java 语言相关的常见抱怨包括,简单的任务涉及到太多的步骤,默认设置有时难以理解。所有 3 种 Java 下一代语言在这些领域都采取了更加明智的方法。这一期 Java 下一代展示 Groovy、Scala 和 Clojure 如何消除 Java 语言的瑕疵。
技术文章 2013年 05月 20日
演化架构和紧急设计: 设计环境因素,第 1 部分
虽然我们非常希望,但是软件设计不是真空存在的。本期演化建构和紧急设计讨论两个环境因素 — 评估和技术债务 — 如何影响设计决策,以及当发现处于汹涌的政治漩涡中,您的紧急设计如何幸存下来。
技术文章 2011年 02月 09日
演化架构和紧急设计: 设计的环境因素,第 2 部分
企业软件项目并不是真空存在的。环境因素有很大影响,甚至对纯技术决策也有影响。本期演化架构和紧急设计继续讨论这些环境因素,特别是重构和架构与设计之间的交叉。
技术文章 2011年 03月 28日
Java 下一代: Groovy、Scala 和 Clojure 中的共同点,第 1 部分
Java 下一代语言(Groovy、Scala 和 Clojure)的共同点多于不同点,主要集中于很多功能和方便性上的共同点。本期文章探究它们各自如何克服 Java 语言中长期存在的一个缺点 -- 无法重载操作符。还要讨论关联性和优先级等相关概念。
技术文章 2013年 05月 13日
演化架构和紧急设计: 使用 Groovy 构建 DSL
内部特定领域语言(DSL)是可行的,但是由于 Java 语言的限制性语法使其使用并不灵活。JVM 中其他语言更适合构建它们。这一期的演化架构和紧急设计涵盖了许多您可以利用的功能,以及在您使用 Groovy 构建内部 DSL 时将要遇到的问题。
技术文章 2010年 09月 30日
Java 下一代: 没有继承性的扩展,第 3 部分
Java 下一代语言(Groovy、Scala 和 Clojure)以多种方式弥补了 Java 语言的扩展限制。本期 Java 下一代文章将介绍通过 Groovy 的元编程工具可以提供的一些令人感到惊讶的扩展功能。
技术文章 2013年 10月 24日
演化架构和紧急设计: 何时、为什么以及如何进行紧急设计
技术文章 2011年 08月 15日
演化架构和紧急设计: 使用 JRuby 构建 DSL
Ruby 是当前用来构建内部域特定语言 (DSL) 的顶级语言。最佳 Ruby 实现之一就是运行在 JVM 上的 Ruby,即 JRuby。在此演化架构和紧急设计的部分中,您将了解到如何利用 Ruby 的表现力来保持您现有的(或未来的)Java 代码优势。您将会看到如何在 Ruby 中构建内部 DSL 作为一种捕获域惯用模式的方式。
技术文章 2010年 10月 25日
Apache Geronimo 中的依赖注入,第 1 部分: 用新的方式观察 J2EE 应用程序中的解耦
本文是两部分组成系列的第一篇文章,讲述了在 Apache Geronimo 中依赖注入(dependency injection,DI)的工作方式。通过使用可用的最轻量级 DI 容器 PicoContainer 的简单示例,不用深入太多细节,就可以发现 DI 的理论基础。
技术文章 2006年 04月 24日
Eclipse V3.1 中的 Java 泛型支持
Java 5 提供泛型支持,泛型支持是开发人员多年以来所要求的特性。它代表了 Java 编程语言一次重要的升级。像泛型这么复杂的技术,不仅对工具供应商也对开发人员带来了挑战。本文着重介绍 Eclipse 如何应对泛型挑战以及泛型给 Java 语言带来的变化,展示了如何在 Eclipse 中充分利用泛型,包括对于快速帮助、快速修复、重构和项目参数选择的支持。此外,还展示了完全泛型化语言的一些微妙而重要的方面。
技术文章 2005年 12月 08日
Java 下一代: 没有继承性的扩展,第 1 部分
Groovy、Scala 和 Clojure 提供了许多扩展机制,但继承几乎是 Java 语言的惟一选择。这一期文章将介绍类别类、ExpandoMetaClass、隐式转换和协议,借助它们来使用 Java.next 语言扩展 Java 类。
技术文章 2013年 08月 15日
Java 下一代: 没有继承性的扩展,第 2 部分
Java 语言受制于扩展机制的固有限制,主要依靠继承和接口。Groovy、Scala 和 Clojure 提供了其他许多扩展替代方案。这期文章进一步探索了 Clojure 将协议用作扩展机制的方法。
技术文章 2013年 09月 23日
函数式思维: 大量转换
函数式编程方式目前存在于所有主要的语言中,但很难识别,因为标识它们的常用名称有很多种。这一期的函数式思维系列文章将展示使用七种不同的函数式框架和语言编写的一个示例,并对它们的相似性和差异进行了分析。
技术文章 2012年 10月 29日
函数式思维: 惰性计算,第 1 部分
许多函数式编程语言的一个共同特性是惰性计算,也就是说,仅在必要时,而不是在声明时,对表达式进行求值。Java 不支持这种风格的惰性,但一些框架和相关语言却支持。本文将介绍如何使用纯 Java 和函数式框架在您的 Java 应用程序中构建惰性。
技术文章 2012年 12月 27日
函数式思维: 利用 Either 和 Option 进行函数式错误处理
Java 开发人员习惯于通过抛出(throwing)和捕获(catch)异常来处理错误,然而,这不符合函数式范式。在本期函数式思维的文章中,将探讨在以函数方式显示 Java 错误的同时仍保留类型安全的方法,说明如何通过函数式返回来包装经过检查的异常,并介绍一个方便的抽象,其名称为 Either。
技术文章 2012年 07月 09日
Java 下一代: 内存化和函数式协同
Scala 和 Clojure 都是函数式语言,而 Groovy 通过库包含了许多函数特性。这一期的 Java 下一代文章将探讨如何在 Java 下一代语言中实现内存化,以及如何使用函数组合特性来实现简洁性。
技术文章 2014年 05月 19日
函数式思维: Groovy 中的函数式特性,第 3 部分
现代的动态语言整合了许多函数式特性,以帮助开发人员完成平常的任务。本文将使用 Groovy 探索在函数级别应用缓存的好处,并将这种缓存方法与一种命令式方法进行对比。本文将演示两种类型的缓存,即方法内缓存和外部缓存,还将探讨命令式和函数式版本的优缺点。
技术文章 2012年 03月 12日
Java 下一代: 使用 Java 8 作为 Java 下一代语言
这一期的 Java 下一代文章将通过调查了解 Java 8 版本是否是您的下一个编程语言的合理候选。本文将介绍 lambda 代码块和 streaming API 如何将 Java 升级为一种现代语言。
技术文章 2014年 06月 30日
函数式思维: Either 树和模式匹配
Scala 基于模式匹配执行调度的能力是 Java 开发人员都很羡慕的一项功能。这一期的文章展示了如何结合使用标准数据结构和泛型数据结构在纯 Java 语言中提供与模式匹配类似的语法。
技术文章 2012年 08月 27日
Java 下一代: 混入和特征
Java 语言的主要范式(面向对象与单继承)有效地模拟了大多数编程问题(但不是所有编程问题)。Java 下一代语言以多种方式扩展此范式,包括混入(mixin)和特征(trait)。本期 Java 下一代文章定义了混入和特征所共享的机制,并深入探讨了 Groovy 中的混入和 Scala 中的特征之间的细微差别。
技术文章 2013年 11月 28日
Java 下一代: 函数式编码风格
所有 Java 下一代语言都包括函数式编程结构,让您可以从一个更高的抽象层面来思考问题。然而,语言间术语的不同使得难以看到类似的结构。本期文章将展示常见的函数式编程结构在 Java 下一代语言中的表示方式,指出那些功能在实现细节上的一些细微差别。
技术文章 2014年 03月 27日
Java 下一代: 对比并发性
或许 Java 下一代语言之间的最明显的区别在于线程、并发性和并行性。本文将介绍让 Scala、Groovy 和 Clojure 中现有的函数代码并行化的一些简单方法,然后还会分析 Scala 中的 actor 并发模型。
技术文章 2014年 06月 05日
Java 下一代: 局部套用和部分应用
所有 Java 下一代语言都包括局部套用(currying)和部分应用,但以不同的方式实现它们。本文将介绍这两种技术和它们之间的区别,并显示它们在 Scala、Groovy 和 Clojure 中的实现细节(和实际应用)。
技术文章 2014年 01月 09日
Java 下一代: Clojure 中的并发性
Clojure 拥有所有 Java 下一代语言中最激进的并发性方法。本期将深入探讨 Clojure 中的并发性的一些方面,包括 epochal 时间模型和软件事务内存。
技术文章 2014年 06月 16日
集中化 Eclipse 中的帮助功能
本文将阐述如何利用 Eclipse 帮助和插件架构的动态特性,创建一个集中的帮助存储库。重点介绍如何使用内容帮助表来创建 Eclipse 插件,如何通过 Infocenter 来集中化管理帮助文件,以及如何创建使您能够直接从 Eclipse 主菜单访问集中的帮助存储库的新菜单项。
技术文章 2005年 07月 25日
函数式思维: 惰性计算,第 2 部分
惰性评估在支持闭包的语言中很容易实现。本期函数式思维文章将展示如何使用 Groovy 的闭包作为构建块来生成一个惰性列表。然后,本文将探讨惰性评估在性能和概念上的一些优势,包括以惰性方式在某些语言中初始化字段的能力。
技术文章 2013年 01月 17日
Java 下一代: 选择您的下一个 JVM 语言
如果任意 Java 下一代语言都适合作为您使用的下一代语言,那么您会如何选择?本文调查了会对这个重要决定产生影响的各个因素。
技术文章 2014年 07月 07日
第 1 - 59 条,共 59 条
显示内容简介 | 隐藏内容简介