`
axgle
  • 浏览: 94262 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

面向变量编程

阅读更多
为什么ruby语言无接口(interface)?说说我的看法。

"接口"是一种把一组"代码"作为其值的"变量",类似于"语言包"的作用(其值可以为en.lang,zh.lang等等)
"变量"的值可以为数字,字符串。。。一直到如今的"代码"本身作为其值。
变量变量,就是可能会变化的量:所以如果代码可能会发生变化,那么代码就可以用变量表示,所以接口即变量

把"代码"本身作为变量的值,是任何有接口(interface)这个关键字的oop语言的一个进步。另外,ruby语言里没有interface这个关键字,但是把"代码本身作为变量的值"的现象却无处不在。所以,接口只不过是把"代码本身作为变量的值"的办法中的一个;而ruby语言不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了。

所谓的面向接口编程,就是面向代码可能会被更换(变化),所以用代码的变量,也就是接口来处理的办法,因此,从这样的意义上看它,面向接口编程依然是在面向变量编程。

"变量"从表示数字,字符串...到表示对象,接口,以及更一般的“代码本身”,所有的一切,都是面向变量编程。
一言以蔽之,无论你面向什么编程,都是在面向变量编程。无论过去,现在,还是未来。。。



分享到:
评论
16 楼 Prentice 2007-01-20  
Elminster 写道
NND,如今都开始玩图灵完备和 lambda 演算了,有谁能给个定义给我,告诉我啥叫“图灵机和 lambda 演算是等价的”?

呵呵,等价么就是,你要一个程序,找一个人用图灵机实现和找一个人用lambda 演算实现,价钱是一样的。

我想他的意思是,computability上是等价的。
15 楼 whisper 2007-01-19  
axgle 写道
撇开具体的编程语言(无论命令式语言也好,函数编程语言也罢),那么“变量”这个概念是个数学概念。

在数学里,变量这个概念本来就比较奇妙;作为数学的一个分支,例如代数,或者现代的数理逻辑,变量的概念依然是存在的。

现在回到我们说的编程语言:我们都知道命令式语言(例如java)里有变量这样的概念。而你说“函数编程语言”里没有变量这个概念。让我们继续讨论:

“函数编程语言”,从名字上就包含了“函数”这样一个数学概念。从数学上看,没有变量的函数是常量函数。而常量函数只不过是一种特殊的函数罢了。

我对函数编程语言没有深入去了解过。所以我只好依靠上面的推理和你讨论,呵呵。我的另外一个推理如下:

如果函数编程语言里没有变量,那么如何表达数学里的变量(编程免不了计算问题,无论你怎么计算,都要解决一个“可重复可替换的问题”,所以变量是必然的----无论你怎么定义变量的含义)?
我的回答是:即使是FP依然存在变量,或者说,那已经是另外一种变量了(和命令式的编程语言相区别)(具体是怎么会事,我暂时不清楚,它有可能是叫另外一个名字,但是从观念上看,满足“广义的变量”的特征)

所以你说的“变量概念与lambda演算就是个冲突”,意思是命令式语言里的“变量概念与lambda演算就是个冲突”吧?
如果A等于B,并且B等于C,那么A等于C

假如“函数编程语言里没有变量”,那么如何表达上面的普遍的"变量公理"呢?
你不要告诉我说:函数A等于函数B,并且函数B等于函数C,所以函数A和函数C不等

没有变量的编程语言,就如同说“没有圆心的圆”一样,是不存在的(这里说的变量是广义的变量)。

parameter = variable ?
变量 = 变量 ?
14 楼 whitenegro 2007-01-19  
我对你的变量的解释不敢同意哦 

变量是对variable的翻译,  那么var  只有在脚本语言中有,
在c/java都会按类型声明的 
在那些语言里  变量表示一段地址
也许有时eval会很有用 或者缺少不了
13 楼 Elminster 2007-01-19  
NND,如今都开始玩图灵完备和 lambda 演算了,有谁能给个定义给我,告诉我啥叫“图灵机和 lambda 演算是等价的”?
12 楼 axgle 2007-01-19  
撇开具体的编程语言(无论命令式语言也好,函数编程语言也罢),那么“变量”这个概念是个数学概念。

在数学里,变量这个概念本来就比较奇妙;作为数学的一个分支,例如代数,或者现代的数理逻辑,变量的概念依然是存在的。

现在回到我们说的编程语言:我们都知道命令式语言(例如java)里有变量这样的概念。而你说“函数编程语言”里没有变量这个概念。让我们继续讨论:

“函数编程语言”,从名字上就包含了“函数”这样一个数学概念。从数学上看,没有变量的函数是常量函数。而常量函数只不过是一种特殊的函数罢了。

我对函数编程语言没有深入去了解过。所以我只好依靠上面的推理和你讨论,呵呵。我的另外一个推理如下:

如果函数编程语言里没有变量,那么如何表达数学里的变量(编程免不了计算问题,无论你怎么计算,都要解决一个“可重复可替换的问题”,所以变量是必然的----无论你怎么定义变量的含义)?
我的回答是:即使是FP依然存在变量,或者说,那已经是另外一种变量了(和命令式的编程语言相区别)(具体是怎么会事,我暂时不清楚,它有可能是叫另外一个名字,但是从观念上看,满足“广义的变量”的特征)

所以你说的“变量概念与lambda演算就是个冲突”,意思是命令式语言里的“变量概念与lambda演算就是个冲突”吧?
如果A等于B,并且B等于C,那么A等于C

假如“函数编程语言里没有变量”,那么如何表达上面的普遍的"变量公理"呢?
你不要告诉我说:函数A等于函数B,并且函数B等于函数C,所以函数A和函数C不等

没有变量的编程语言,就如同说“没有圆心的圆”一样,是不存在的(这里说的变量是广义的变量)。
11 楼 落花虽有意 2007-01-18  
实在不错~`
换了种思维
10 楼 Julien 2007-01-18  
huangyiiiiii 写道
c 里面 define 的害处就忘了?莫非时代在倒退,代码生成的技术又走上台面了。

静态语言的意识形态已无法禁锢自由的心……
推倒柏林墙的时候到了!
——以上为KUSO^^
9 楼 李超群 2007-01-18  
再讨论深点就是哲学了。一生二,二生三,三生万物,推来推去,只是01而已。
8 楼 huangyiiiiii 2007-01-17  
c 里面 define 的害处就忘了?莫非时代在倒退,代码生成的技术又走上台面了。
7 楼 axgle 2007-01-17  
FP另类指南:
http://chn.blogbeta.com/232.html
6 楼 axgle 2007-01-17  
whisper 写道
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念

即使是FP依然存在变量,或者说,那已经是另外一种变量了

考虑一下命令式编程语言里的“常量”---不要奇怪,如果我说“常量依然是一种变量”,那也不是奇怪的事情。例如:
const A=1

虽然A=1后不能继续让A=2。但是你依然可以把第一次的1修改为2.

说个笑话,动词是什么词?其实“动词”是个名称,“动词”是名词。
5 楼 whisper 2007-01-17  
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念
4 楼 Julien 2007-01-17  
还要file.open干什么,直接eval不就得了
实际上用元编程是一件危险,复杂,不可控的事情,我觉得这种手法最奇妙的地方就是赋予了程序结构生物性,代码不再是静态的需要你来管理的结构,而是有自主意识,自我构建能力的生物,你只需要给他模糊简单的抽象特性,他就会给你完成细节和实现,构建出大规模的系统,这是我最近玩元数据和面向特性编程的体会
3 楼 jiyong1001 2007-01-17  
sizhefang 写道
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了


关于“用代码来生成新的代码”,说说我的体会

5.times do |i|
  File.open("temp.rb","w") do |f|
   f.puts "module Temp"
   f.puts " def Temp.var"
   f.puts " #{i}"
   f.puts " end"
   f.puts "end"
 end
 load "temp.rb"
 puts Temp.var
end

输出:

0
1
2
3
4


我觉得这段代码可以很好得诠释ruby的动态能力。
代码中动态得创建了一个temp.rb文件,内容就只有一个module,其中有一个module级别的方法 var,将接收到的参数显示出来。
主程序导入temp.rb并将参数传入其中执行之。我认为这就是典型的“用代码来生成新的代码”

这样做可以有很多好处,比如更改服务器的配置文件而无需重启服务器等等
2 楼 sizhefang 2007-01-17  
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了
1 楼 edgeloner 2007-01-17  
有见地

相关推荐

    PLC的面向对象编程

    DFB(分布式功能块)定义中包含了输入/输出参数、私有/共有变量和代码实现,这些都是面向对象编程中类的基本元素。创建类的实例就像创建一个普通的布尔变量一样简单,在“FunctionBlocks”中定义变量即可。 二、...

    java面向对象编程pdf

    Java面向对象编程PDF 在这篇文章中,我们将对Java面向对象编程的基础知识进行总结和解释。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为...

    面向对象编程与非面向对象编程

    面向对象编程(Object-Oriented Programming,简称OOP)与非面向对象编程是两种不同的编程范式,它们在软件开发中的应用和设计理念有着显著的区别。本文将深入探讨这两种编程范式的概念、特点及其在实际软件工程中的...

    KUKA系统变量编程指导(全集+中文解释).pdf

    KUKA系统变量编程指导(全集+中文解释) 本文档提供了关于KUKA机器人系统变量的编程指导,涵盖了系统变量的使用、编辑和修改方法,以及对应的安全注意事项。该文档面向熟练掌握KUKA机器人系统和KR C…控制器功能的...

    JAVA的面向对象编程笔记(经典)

    Java面向对象编程笔记 本文主要介绍了Java面向对象编程的基本概念和原则,包括对象、类、继承、多态、封装、抽象等概念的定义和解释,并通过实例讲解了面向对象编程的思想和方法。 一、什么是对象? 在面向对象...

    Java面向对象编程思想.pdf

    类是 Java 面向对象编程的基本单元,它是变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。对象是类的实例,每个对象都有其自己的状态和行为。 五、实例化 实例化是将类生成多个对象的...

    Java面向对象编程练习题.pdf

    Java面向对象编程练习题 本资源摘要信息涵盖了 Java 面向对象...本资源摘要信息展示了 Java 面向对象编程的基础知识,涵盖了类的成员变量、方法、构造方法等概念,为学习 Java 编程语言的基础知识提供了有价值的参考。

    C语言中的面向对象编程技术.pp(中文翻译版)

    ### C语言中的面向对象编程技术 #### 概述 C语言作为一门历史悠久且广泛应用的编程语言,一直以来都被认为是一种过程式的编程语言。然而,《C语言中的面向对象编程技术》这本书提出了一个有趣的观点:即如何利用...

    VC++习题答案_vc++面向对象编程第四版答案,visualc++6.0第四版

    1. **面向对象编程基础**:面向对象编程(OOP)是C++的核心特性,包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态性(Polymorphism)。通过类定义数据结构和操作数据的方法,...

    Perl的面向对象编程

    在Perl的世界里,面向对象编程(Object-Oriented Programming, OOP)提供了一种组织代码、提高可重用性和模块化的方法。本篇文章将深入探讨Perl中的面向对象编程概念、核心特性以及如何在实践中应用。 一、Perl的类...

    2.04 面向对象编程.pdf

    面向对象编程(OOP)和闭包详解 面向对象编程(OOP)是一种编程范式,它将程序视为一组对象的交互。闭包是 JavaScript 中一个重要的概念,指的是一个函数可以使用函数之外定义的变量。下面我们将详细介绍面向对象...

    Swift语言基础教程:从变量到面向对象编程的全面介绍

    内容概要:本文档是一份关于Swift语言的基础教程,涵盖了Swift的环境设置、变量与常量、数据类型、控制流、函数以及面向对象编程等基本概念。通过对这些基础概念的讲解,帮助读者快速掌握Swift编程的核心知识点。...

    面向对象编程思想-alexPPT课件.ppt

    本资源是关于面向对象编程思想的PPT课件,主要介绍了面向对象编程的思想、出现背景、类和对象、面向对象编程的特点、面向对象编程与面向过程编程的区别等内容。 一、面向对象编程思想简介 面向对象编程是当前...

    Python 面向对象编程

    "Python 面向对象编程基础知识点" Python 面向对象编程是 Python 编程语言的基础,它具有独特的编程风格和语法规则。本文将从逻辑行和物理行、缩进、注释、main 函数、变量、表达式、语句、数据类型和运算等方面...

    面向对象实验通过编程和上机实验理解 Java 语言是如何体现面向对象

    总的来说,这个实验旨在通过实践让学习者掌握面向对象编程的基本概念,包括如何定义和使用类,创建和操作对象,以及如何通过成员变量和方法实现数据的封装。同时,通过具体的代码实例,加深对Java语言面向对象特性的...

    基于闭包的JavaScript面向对象编程框架.pdf

    “基于闭包的JavaScript面向对象编程框架” 本文总结了基于闭包的JavaScript面向对象编程框架的设计和实现。通过使用闭包,实现了基于类的面向对象编程的封装、继承和多态特征。 闭包(Closure)是JavaScript中的...

    Java的面向对象编程.ppt

    Java的面向对象编程是Java语言的核心特性之一,它基于面向对象编程(Object Oriented Programming,OOP)的概念,旨在模拟现实世界的实体和它们之间的交互。在Java中,对象是类的实例,它们包含状态(数据)和行为...

    java面向对象编程练习

    本资源汇总了 Java 面向对象编程的基本概念和实践练习,涉及到类的成员变量、构造方法、方法重载、get 和 set 方法等方面。 类的成员变量是面向对象编程的基本概念之一。类的成员变量是指类中定义的变量,它可以是...

    Python面向对象编程指南.[美]Steven F.Lott(带详细书签).part2.rar

    Python面向对象编程指南.[美]Steven F.Lott(带详细书签),分成两个压缩包。本书由树莓派基金会资深软件开发工程师亲笔撰写,是学习在树莓派上编程的必备手册。即使你没有任何编程经验,也可以畅游树莓派的世界。本书...

Global site tag (gtag.js) - Google Analytics