zoukankan      html  css  js  c++  java
  • 几种常见语言的基本语法对比:数字处理

    c++: 在不涉及到内存管理下,总体感觉很爽,又因为是unix自带编译器。非常爽。唯一一点就是枚举类型中的枚举值是好像是全局变量名。搞得枚举值命名很长。 语法基本没有太多停顿 ,这个例子中所涉及的语法部分和c#,java 很像。

    它的模板确实非常爽。爽到没朋友。

    c++就是这样一种语言,用其他语言会觉得,xx真弱,还是c++牛。等你用c++开发。就会说:我去。这是个毛啊。任何语言都比你方便。

    #include <iostream>
    using namespace std;
    enum enum_op
    {
        enum_op_add,
        enum_op_minus,
        enum_op_time,
        enum_op_divide
    };
    
    
    int NumberCaculate(int a,int b,enum_op op)
    {
        int ret=0;
        switch (op)
        {
            case enum_op_add:
            {
                ret=a+b;
                break;
            }
            case enum_op_minus:
            {
                ret=a-b;
                break;
            }
            case enum_op_time:
            {
                ret=a*b;
                break;
            }
            case enum_op_divide:
            {
                ret=a/b;
            }
    
        }
        return ret;
    }
    
    template<typename T>
    T NumberCaculateFull(T a,T b,enum_op op)
    {
        T ret=0;
        switch (op)
        {
            case enum_op_add:
            {
                ret=a+b;
                break;
            }
            case enum_op_minus:
            {
                ret=a-b;
                break;
            }
            case enum_op_time:
            {
                ret=a*b;
                break;
            }
            case enum_op_divide:
            {
                ret=a/b;
            }
    
        }
        return ret;
    }
    
    
    int main()
    {
        cout<<"hello,world"<<endl;
        cout<<NumberCaculate(1,3,enum_op_minus)<<endl;
        cout<<NumberCaculateFull<float>(1.2,3.3,enum_op_time)<<endl;
    }

    object-c:因为有xcode这个地球第二的编辑器(vs第一),所以写代码还是很爽。 和c++不同的是  对于 枚举中 参数的定义  enum enum_op op, 重要的是不完全支持泛型 。这个就差距了。

    //
    //  main.m
    //  HIWorld
    //
    //  Created by linson on 2018/8/19.
    //  Copyright © 2018年 linson. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    enum enum_op
    {
        enum_op_add,
        enum_op_minus,
        enum_op_time,
        enum_op_divide
    };
    
    int NumberCaculate(int a,int b,enum enum_op op);
    
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
            NSLog(@"Hello, World!");
            
            int a=2;
            int b=4;
            NSLog(@"%i", NumberCaculate(a, b, enum_op_add));
            NSLog(@"%i", NumberCaculate(a, b, enum_op_minus));
        }
        return 0;
    }
    
    
    int NumberCaculate(int a,int b,enum enum_op op)
    {
        int ret=0;
        switch (op)
        {
            case enum_op_add:
            {
                ret=a+b;
                break;
            }
            case enum_op_minus:
            {
                ret=a-b;
                break;
            }
            case enum_op_time:
            {
                ret=a*b;
                break;
            }
            case enum_op_divide:
            {
                ret=a/b;
            }
                
        }
        return ret;
    }

     、

    c#:语言和ide。都是一流的手感和观感。枚举值是用枚举变量加 .号访问,非常舒服,毕竟是有虚拟机的语言。就是高级。

    但是做完这个例子,才发现 为什么c++的模板是预编译阶段执行的。更方便使用,直接让模板变成一个代码生成器。  让编译器去检查错误。而不是像c# 是运行期 的。需要自己写很多异常处理。

    写c++的时间比较短。大概1年多点。现在根本不想用它。确实非常难用。但是发现很多设计,确实是厉害。  就是因为太厉害。必须要规范,圈养,阉割,才能使用。  所以无法快速开发。

    类型判断关键字.  c# :is  .java: instanceof  .细微处.java 更好.   is 含义太广,是什么鬼.  instanceof .直译中心思想.简洁.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace helloworld
    {
        class Program
        {
            static void Main(string[] args)
            {
                System.Console.WriteLine("helloworld");
    
                int a=2;
                int b=4;
    
                foreach(enum_op myop in Enum.GetValues(typeof(enum_op)))
                {
                    System.Console.WriteLine("ret:" + NumberCaculate(a, b, myop));
                }
    
                foreach (enum_op myop in Enum.GetValues(typeof(enum_op)))
                {
                    System.Console.WriteLine("ret:" + NumberCaculateFull<decimal>(2, 3, myop));
                }
    
                System.Console.Read();
            }
    
    
            enum enum_op
            {
                add,
                minus,
                time,
                divide
            };
    
    
            static T NumberCaculateFull<T>(T a,T b,enum_op op)
            {
                if (a is int)
                {
    
                    int ret = 0;
                    int inta = Convert.ToInt32(a);
                    int intb = Convert.ToInt32(b);
    
                    switch (op)
                    {
                        case enum_op.add:
                            {
                                ret = inta + intb;
                                break;
                            }
                        case enum_op.minus:
                            {
                                ret = inta - intb;
                                break;
                            }
                        case enum_op.time:
                            {
                                ret = inta * intb;
                                break;
                            }
                        case enum_op.divide:
                            {
                                ret = inta / intb;
                                break;
                            }
    
                    }
                    return (T)Convert.ChangeType(ret, typeof(T));
                }
                else if(a is decimal)
                {
                    decimal ret = 0;
                    decimal inta = Convert.ToDecimal(a);
                    decimal intb = Convert.ToDecimal(b);
    
                    switch (op)
                    {
                        case enum_op.add:
                            {
                                ret = inta + intb;
                                break;
                            }
                        case enum_op.minus:
                            {
                                ret = inta - intb;
                                break;
                            }
                        case enum_op.time:
                            {
                                ret = inta * intb;
                                break;
                            }
                        case enum_op.divide:
                            {
                                ret = inta / intb;
                                break;
                            }
    
                    }
                    return (T)Convert.ChangeType(ret, typeof(T));
                }
                else
                {
                    return (T)Convert.ChangeType("0", typeof(T));
                }
            }
    
            static int NumberCaculate(int a, int b, enum_op op)
            {
                int ret = 0;
                switch (op)
                {
                    case enum_op.add:
                        {
                            ret = a + b;
                            break;
                        }
                    case enum_op.minus:
                        {
                            ret = a - b;
                            break;
                        }
                    case enum_op.time:
                        {
                            ret = a * b;
                            break;
                        }
                    case enum_op.divide:
                        {
                            ret = a / b;
                            break;
                        }
                }
                return ret;
            }
        }
    }

    java ,基本和 c# 一样. 枚举用.号访问. enum 结束符号 加不加;都可以编译   范型是运行时范型.

    但是 .static 居然还要加public. 都静态了,还需要特定指名public ,特别!  default 是不能外部访问的.这个只能是.摸头杀.

    而且范型方法比c#多提供一个 可选的 基类的选择选项.  好像作用不大.如果需要提供基类.我直接用 多态了.还需要范型作什么.范型的目的,就是处理 基类不是一类的东西.

    总体来说, 比c#,少了一个更好的ide.  对vjava还不熟悉.  总体很好,有些 强硬的思想,反而使编程规范化.而  c#走的太灵活了.

    ide真的很重要. 说语言才是根本的.ide不重要的. 都是在用比较好的工具了, 没有差到哪里去.     去写写c++.不同平台,不同工具,  界面框架也不统一.各种纠结. 郁闷.

    package com.Tea;
    
    
    public class HelloWorld
    {
        enum enum_op
        {
            add,
            minus,
            time,
            divide
        };
        
        public static void main(String[] args)
        {
            System.out.println("hello,world.");
            enum_op[] allOps=enum_op.values();
            
            int a=2,b=3;
            for(int i=0;i<allOps.length;i++)
            {
                System.out.println(NumberCaculate(a, b, allOps[i]));
            }
            
            Integer c=3;
            Integer d=4;
            
            Number retInteger=NumberCaculateFull(c, d, enum_op.add);
            System.out.println(retInteger);
        }
        
        
         static <T extends Number> Number NumberCaculateFull(T a, T b,enum_op op) 
         {
             if(a instanceof  Integer)
             {
                 return (Number)1;
             }
             else if(a instanceof Float)
             {
                 return (Number)2;
             }
             else 
             {
                 return (Number)4;
             }
        }
        
        
        static int NumberCaculate(int a, int b, enum_op op)
            {
                int ret = 0;
                switch (op)
                {
                    case add:
                        {
                            ret = a + b;
                            break;
                        }
                    case minus:
                        {
                            ret = a - b;
                            break;
                        }
                    case time:
                        {
                            ret = a * b;
                            break;
                        }
                    case divide:
                        {
                            ret = a / b;
                            break;
                        }
                }
                return ret;
            }
        
    }

    脚本 语言 lua

    脚本 语言 只 了解 js和 lua。lua非常简洁 ,无任何官方扩展api。只有自带的简单语法和解释器。

    因为是脚本语言 。所以 执行顺序 是 从上往下解释执行的。没有编译工具去整体编译为机器指令。

    解释器 的话。感觉所以脚本语言很灵活,会有一些小惊喜。 可变参数列表。 .. 来代替+ .

     非常简洁 ,配合c,c++  完成一些方法还是非常好的。

    print("hi,i am lua")
    
    function addnumber2(...)--可变参数
        local allnumber={...}
        local ret=0
        for i=1,#(allnumber) do
            ret=ret+allnumber[i]
        end
        return ret;
    end
    
    function addnumber(a,b)
        local ret=0
        
        return a+b;
    end
    
    print(addnumber2(1,2,3,4,5,6,7))
    print("2+4=" .. addnumber(2,4))
  • 相关阅读:
    Vagrant安装virtualbox
    博客园页面定制CSS
    Node.js安装详细步骤教程(Windows版)
    已完成题目
    20.10.07总结
    纯IPv6主机上搭建网站
    Azure Database for MySQL Connection Security -(3) Private Endpoint
    Azure Database for MySQL Connection Security -(2) VNET rules and service endpoint
    Azure Database for MySQL Connection Security -(1) Public network access and Firewall rules
    python教程:删除列表中某个元素的3种方法
  • 原文地址:https://www.cnblogs.com/lsfv/p/9581657.html
Copyright © 2011-2022 走看看