在我进入Web创作时我停止使用C++进行编程后,我被PHP的高级构造(如哈希表或其动态,弱类型)所破坏.我记得C/C++指针的焦虑和低级Win32 API句柄和消息循环的迷宫,这使我无法利用像Code :: Blocks这样的环境来处理桌面应用程序.我也不是很喜欢笨重的,静态类型的C#/ .NET环境.还有其他想法吗?
令我惊讶的是,我对Ruby和Python等动态语言产生了更多的兴趣.声称它们是100%面向对象的,但是当我阅读几个基本概念(如接口,方法重载)时,缺少运算符重载.它是以某种方式内置在封面下还是这些语言不需要它?如果后者是真的,那么他们100%面向对象?
编辑:基于一些答案,我看到Python和Ruby都可以进行重载,Ruby 1.8.6和Python 2.5.2就是这种情况吗?
我有一个POJO使用服务来做某事:
public class PlainOldJavaObject {
private IService service;
public String publicMethod(String x) {
return doCallService(x);
}
public String doCallService(String x) {
if(service == null) {
throw new RuntimeException("Service must not be null");
}
return service.callX(x);
}
public interface IService {
String callX(Object o);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个Groovy测试用例:
class GTest extends GroovyTestCase {
def testInjectedMockIFace() {
def pojo = new PlainOldJavaObject( service: { callX: "very groovy" } as IService )
assert "very groovy" == pojo.publicMethod("arg")
}
def testMetaClass() {
def pojo = …Run Code Online (Sandbox Code Playgroud) groovy unit-testing programming-languages dynamic-languages mocking
你在实践中失去了什么,当你选择一个静态类型语言,如Scala的(或F#,哈斯克尔,C#),而不是动态类型的人,比如Ruby,Python和Clojure中,Groovy中(其中有宏或运行时元编程能力)?请考虑最好的静态类型语言和最好的(在您看来)动态类型语言,而不是最差的语言.
答案摘要:
与像Scala IMHO这样的静态类型语言相比,像Ruby这样的动态语言的主要优点是:
为什么Lisp及其所有动态功能都可以静态编译,但Python不能(不会丢失所有动态功能)?
为了编写可测试的C#代码,我大量使用DI.
然而,最近我一直在搞乱IronPython并发现你可以模拟任何方法/类/函数等...你喜欢,对DI的需求已经消失.
这是Python等动态联盟的情况吗?
代替:
class Person(Address) {
...
Run Code Online (Sandbox Code Playgroud)
你可以有:
class Person() {
...
// Address initialised in here.
Run Code Online (Sandbox Code Playgroud)
对于动态语言,因此根据动态联盟的manaual DI,根本不需要.
有什么建议吗?
在过去的几个月里,我一直在从Java转换到Groovy,我可以欣赏它带来的许多好处:更少的代码,闭包,构建器,MOP最终使Grails成为可能的框架,在编写测试时易于模拟等.
但是,我被同事"指责"我的代码并不够常规.也就是说,我仍然为我的参数和字段声明类型,倾向于使用继承和多态而不是鸭子打字等.在我看来,在这些情况下,它不仅是动态与静态,而且是动态与面向对象的范式.有点困境.在那些情况下,我仍然倾向于选择OO.我觉得OO范例在其基本前提中具有很大的价值,允许您将代码结构与特定的现实世界概念进行抽象和关联.
所以,以下是我需要帮助的特殊问题:
我应该为参数,字段等声明类型吗?
当简单方法做的时候,我应该将代码块声明为闭包吗?
我什么时候应该使用duck typing而不是多态动态调度.例如,在groovy我可以做动物."$ action"()或def动物; animal.action(),而不是Animal animal = new Dog(); animal.action().我可以在开放 - 封闭原则的上下文中首先看到问题,但是更喜欢OO样式多态的任何其他原因?
什么时候应该在groovy中使用接口(如果有的话)?
我确信还有一些其他类似的困境,我没记下来.我也认为这些问题不仅适用于groovy,也适用于任何其他动态语言.你有什么意见?
游戏框架最强大的卖点之一是它的开发周期,只需修复代码,返回浏览,重新加载,然后进行一次,所有这些都没有j2ee web开发的典型编写,编译,部署和麻烦.
然而,对于来自php,ruby或python的Web开发人员来说,这并不令人惊讶,而且它被认为是开发Web应用程序的自然方式.
此外,游戏的许多优点(高效的模板系统,快速解决错误,无状态,有趣和高效)在这些框架中被视为理所当然......
所以我想知道你认为游戏框架为来自动态语言的Web开发人员带来的主要优势是什么.
我想知道为什么不编写智能手机/移动设备操作系统以允许动态语言作为首选语言?iPhone使用Objective-C,谷歌Android使用Java,Windows Mobile使用任何方式的.NET语言.
使用Python,Ruby或任何其他动态语言编写移动操作系统背后的原因是什么?我知道,在较低的层次上,它们不会削减它,但C或C++会很好,例如,Python可以成为与之交互的顶层.我的意思是,有Jython或CPython.
我只是想知道为什么我们在今天的移动操作系统中看不到更多动态语言支持.
也许我受限于我在动态语言方面的经验(Ruby on Netbeans和Groovy on Eclipse),但在我看来,动态语言的本质使它无法重构(重命名方法,类,推升,下拉,等)自动.
是否可以使用任何动态语言(使用任何IDE /工具)重构AUTOMATICALLY?我对Ruby,Python和Groovy特别感兴趣,以及重构与所有Java IDE中可用的100%自动重构相比如何.
groovy ×2
java ×2
python ×2
ruby ×2
clojure ×1
compilation ×1
frameworks ×1
interface ×1
lisp ×1
mobile ×1
mocking ×1
oop ×1
paradigms ×1
refactoring ×1
scala ×1
unit-testing ×1
winapi ×1