五千年(敝帚自珍)

主题:【调查】大家都主要用什么写程序? -- 还是不懂

共:💬139 🌺25
分页树展主题 · 全看首页 上页
/ 10
下页 末页
      • 家园 Java里面也不是不能进行Reference或者返回多个值的
        public class swap {
        	public swap(Integer[] a, Integer[] b) {
        		Integer c = null;
        		c = a[0];
        		a[0] = b[0];
        		b[0] = c;
        	}
        	static public void main(String[] argv) {
        		Integer[] a = new Integer[1];
        		Integer[] b = new Integer[1];
        		a[0] = new Integer(5);
        		b[0] = new Integer(6);
        		System.out.println("a="+a[0]);
        		System.out.println("b="+b[0]);
        		swap s = new swap(a, b);
        		System.out.println("a="+a[0]);
        		System.out.println("b="+b[0]);
        	}
        }

        这里面的swap函数就可以交换两个数,并在调用的主程序里面反映出来......

        • 家园 服兄是改变了题目的原意了

          服兄使用的是Array作为参数,这已经改变题目的原意。而且这个做法,本身很不自然。

          程序中大多数情况下,是需要直接将两个整数交换,而不是两个Integer Array的第一个元素。除非服兄一直将Integer作为Integer Array的第一个元素使用的,上述这个swap()函数实质上是毫无意义的。

          比方说我有两个整型数a,b,要swap,这个要求不苛刻,比如说写个简单sort的程序就经常要用到,按服兄的做法就需要,先要create 2 个Integer Array,然后,把a,b分别放入这两个Integer Array中,call swap(),再从这2个Integer Array中取回结果到a,b。无论从程序可读性还是效率来说,都不如直接用下面的

          int t=a; a=b; b=t;

          简洁明了效率高,因此实际上服兄的这个变通做法在实际编程中是基本无应用价值的,因为不自然。

          • 家园 呜呜呜,老兄误会俺了

            这个例子要说明的,当然不是swap函数能否实现这么简单。俺试图说明的是呢,Java里面也可以搞指针游戏的。原理就是利用Java的原子类型以外的Object,实际上也都是指针参照的原理。所以呢,只要绕过最外层的值参照,就可以恢复到C++时代的地址参照去咯。

            数组就是这样的一个利用方法――数组里面存的,都是地址。所以在这个层面上交换,对外面就会有影响了;

            其实,明白了这层道理,做出自定义的Class就可以在Java中同样轻易地实现地址参照或是多返回值函数的功能。比如下面这个程序,展示的就是任意类型的交换、同样利用的是地址参照的原理......

            class type_a {
            	Object type_a_value = null;
            	public type_a(Object init) {
            		this.set(init);
            	}
            	public void set(Object input) {
            		this.type_a_value = input;
            	}
            	public Object get() {
            		return this.type_a_value;
            	}
            	public String toString() {
            		return this.type_a_value.toString();
            	}
            }
            public class swap {
            	public swap (type_a A, type_a B) {
            		type_a C = new type_a(A.get());
            		A.set(B.get());
            		B.set(C.get());
            	}
            	static public void main(String[] argv) {
            		type_a A1 = new type_a("String A");
            		type_a A2 = new type_a("String B");
            		System.out.println("A1="+A1);
            		System.out.println("A2="+A2);
            		swap SWAP = new swap(A1, A2);
            		System.out.println("A1="+A1);
            		System.out.println("A2="+A2);
            	}
            }	
            
      • 家园 有些不同意见,Java(5.0) 现在支持Generics。

        不过是在编译器级别实现的,而不是在JVM level实现的,所以功能有了,但执行效率没有上去。

        C++的Template本质是Code Repalcement。如果想要最好的Generics,那还得说是.NET 2.0的。Runtime级别的Generics,没有C++ code inflating的问题,性能大幅提高(对于ValueType,200%,对于Refrence type, 15%)

        你说的Swap在.NET中支持。用什么语言都行。比如用VB.NET.

            Public Sub Swap(ByRef x As Int32, ByRef y As Int32)
                Dim temp As Integer = x
                x = y
                y = temp
            End Sub
        
      • 家园 好文,请继续

        据我所知,好像大部分EDA软件的核心算法使用C++,因为:

        要表达复杂的数据结构;template!

        内存管理直接影响速度和资源使用效率;

        有很多软件可以用于探测memory leakage,如rational;

        一些格式转化的接口程序用perl写。

        java 用于网络方面的特别多?

    • 家园 【原创】我见识过的两个好东东

      1、没有SQL的数据库不叫数据库

      那年,我们接触了dBaseII,在一种叫做NEC的电脑上实习的。那种机器用的是8寸软盘,是我平生用过的最大的软盘。

      那时我们学会了一种叫“全屏幕编辑”的方法,为dBaseII具有如此强大的功能吃惊。在此之前,我们写程序要用edlin,一次一行。dBaseII竟然能够在所有变量赋值框之间来回移动,比一句一句的input方便多了。

      后来我们开始接触dBaseIII,这时已经用上了PC机了。见到了3.5英寸的软盘,嘿嘿,这个小巧的盘比5寸盘还存储更多东西,真不可思议。

      我们可以使用中文了,我们编写的dBaseIII程序可以处理中文字符串了。

      我们又见到FoxBase,它在DOS下的速度是dBaseIII的6倍!神奇啊神奇。

      我们以前用文本文件来顺序存储和查找档案,有了数据库,一下子变得那样的快捷。

      在这个水平下,我们停留了许多年,因为FoxBase几乎无所不能。后来的FoxPro也没有让我动心过,直到遇见了SQL小姐。

      在我眼中,SQL小姐是完美的,编程语言都能像她这样,程序员才是电脑的主人。

      2、OOP是接近完美设计

      那时,我们在字面上争论过,为什么Basic语言是高级语言,而不是“基础”语言。

      后来,听到一个名词:结构化程序设计。据老师说,无论什么人,用这个方法开发出来的程序都差不多,便于理解和修改。

      最近,我们接触了OOP,才知道这才是编程语言的发展方向,感觉它们向着SQL接近了。

      • 家园 SQL不是数据库的全部,也不是数据库的将来

        目前大型金融机构的许多数据仍然存放在层次性数据库(如IMS)或其他不支持SQL的文件系统(如VSAM)里。这些经过优化处理的数据的存取速度远超过关系型数据库。

        Google的数据也没有存放在SQL型的数据库里。

        • 家园 你的见识比我广啊。我也有类似的经历,

          我做过比较,在SAS中使用传统SAS命令和SQL来完成相同一个的相当大的任务,结果传统SAS命令速度更快。

          但是SAS命令显得很怪很笨拙,而SQL因为与人类语言非常接近而经常被乐于采用。

      • 家园 OOP和SQL可是两个世界。

        一个是Object-oriented world,另一个是relational data和procedure-base的世界。

    • 家园 拽一下

      FORTRAN比C或C++快 - 跟程序优化无关。C的速度现在进步了,大概是FORTRAN的90%,以前好像是70%。这事儿Intel的老田有发言权。

      画图我以前用SigmaPlot,当然是盗版的,正版的贵死,学生版的USD680(?)

      现在用gnuplot,很爽!!! 以前偶尔也用。现在是EXPERT。gnuplot不是GNU plot。

    • 家园 计算机语言只不过是人与计算机交互的工具而已

      以前在单位写COBOL程序

      现在单位用Java写程序

      在学校读书的时候主要用C++

      业余时间搞网站常用用PHP

      在家鼓捣Linux的时候用C

      目前正在努力练习Assembler 370...

    • 家园 最高效主题,呼啦一下老程序员们都冒出来了!
    • 家园 c,perl, c++, java, c#, php

      1.如果你想告诉别人自己是黑客,就说不用别的,只用c和perl

      2.如果做很大的分布式系统,告诉别人用J2EE/java,C#(.NET),什么三层架构之类的

      3.如果做desktop程序,告诉别人用VC, VB, delphi或C#(一年后)

      4.如果要写简单的网站,告诉别人用php和mysql

      5.如果有人告诉你,为了开发跨平台的应用程序,用java,那就说他傻。

分页树展主题 · 全看首页 上页
/ 10
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河