经常用到多种编程语言,时间长了容易搞混,整理一下不用语言语法的异同点,方便快速学习或温习。
根据TIOBE编程语言排行榜,语言顺序是Java, C, C++, Python, Visual Basic .NET, C#, PHP, JavaScript(简称JS), SQL, Swift,MATLAB, Go,其中Python和Visual Basic .NET语法比较特别,SQL主要是访问和处理数据库,MATLAB主要是数学方面,所以只整理八种语言。
TIOBE 发布的2018年10 月编程语言排行榜:
Oct 2018 | Oct 2017 | Programming Language | Ratings | Change | 主要使用场景 |
---|---|---|---|---|---|
1 | 1 | Java | 17.801% | +5.37% | web后端,游戏后端,大数据,Android |
2 | 2 | C | 15.376% | +7.00% | 各种核心库,嵌入式 |
3 | 3 | C++ | 7.593% | +2.59% | 各种后端(除web) |
4 | 5 | Python | 7.156% | +3.35% | 机器学习,大数据 |
5 | 8 | Visual Basic .NET | 5.884% | +3.15% | Win平台下的APP、web后端 |
6 | 4 | C# | 3.485% | -0.37% | Win平台下的APP、web后端,Unity3D |
7 | 7 | PHP | 2.794% | +0.00% | web后端 |
8 | 6 | JavaScript | 2.280% | -0.73% | web前端,Node.js |
9 | - | SQL | 2.038% | +2.04% | 数据库 |
10 | 16 | Swift | 1.500% | -0.17% | iOS |
11 | 13 | MATLAB | 1.317% | -0.56% | 数学计算 |
12 | 20 | Go | 1.253% | -0.10% | 高性能分布式后端 |
主要参考:菜鸟教程(Java 教程,C 语言教程,C++ 教程,Python 3 教程,C# 教程,PHP 教程,JavaScript 教程,Node.js教程,SQL 教程,Swift 教程,Go 语言教程)
文章目录
基础语法
Hello World
//java
public class HelloWorld {
public static void main(String []args) {
System.out.println("Hello, World!");
}
}
//c
#include <stdio.h>
int main(){
printf("Hello, World! \n");
return 0;
}
//cpp
#include <iostream>
using namespace std;
int main(){
cout << "Hello, World!";
return 0;
}
//csharp
using System;
namespace HelloWorldApplication{
class HelloWorld{
static void Main(string[] args){
Console.WriteLine("Hello, World!");
Console.ReadKey();
}
}
}
<!DOCTYPE html>
<html>
<body>
<?php
echo "Hello, World!";
?>
</body>
</html>
//Node.js
console.log("Hello, World!");
//javascript
<!DOCTYPE html>
<html>
<body>
<script>
document.write("<p>Hello, World!</p>");
</script>
</body>
</html>
//swift
import UIKit
var myString = "Hello, World!"//Swift语言没有";"
print(myString)
//go
func main(){
//{ //{不能在单独的行上,其他语言没这个问题
fmt.Println("Hello, World!")//Go语言没有";"
}
标识符
类名、变量名以及方法名都被称为标识符。
- 所有的标识符都以字母(A-Z或者a-z)或下划线(_)开始(Java、JS可用$,C#可用@开始)
- 首字符之后可以是字母(A-Z或者a-z)、下划线(_)或数字(0-9)的任何字符组合(Java、JS可用$,C#可用@)
- 关键字不能用作标识符
- 标识符是大小写敏感的
- 合法标识符举例:age、_value、__1_value
- 非法标识符举例:123abc、-salary
空格
空格分隔语句的各个部分。
int age;//age前至少一个空格
fruit = apples + oranges; //fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,只是为了增强可读性
let a= 1 + 2 //在Swift中,运算符不能直接跟在变量或常量的后面,这样会报错
注释
//这是单行注释
/*这也是单行注释*/
/* 这是多行注释
* 这是多行注释
*/
数据类型
- java: byte, short, int, long, float, double, boolean, char, 引用类型(类似C的指针,对象、数组)
- C: char, unsigned char, signed char, int, unsigned int, short, unsigned short, long, unsigned long, float, double, long double, void
- C++: bool, char, int, float, double, void, wchar_t, (可加signed, unsigned, short, long修饰), (typedef int feet; feet varA;//定义新类型),
- C#: bool, byte, char, decimal, double, float, int, long, sbyte, short, uint, ulong, ushort
- PHP: String, Integer, Float, Boolean, Array, Object, NULL
- JS: String, Number, Boolean, Null, Undefined, Symbol, 引用类型(Object, Array, Function)
- Swift: Int, UInt, Int8, UInt8, Int32, UInt32, Int64,UInt64, Float, Double, Bool, String, Character, Optional
- Go: bool, int, uint8(byte), uint16, uint, unit32, uint64, int8, int16, int32(rune), int64, float32,float64, complex64, complex128, uintptr(无符号整型,用于存放一个指针), 派生类型(指针Pointer,数组,结构化struct,Channel,函数,切片,接口类型interface,Map )
变量类型
- Java, C, C++, C#:
int varA;
,int varA = 42;
- PHP:
$varA=42;
- JS:
var varA;
,var varA = 42;
,let varA = 42;
(let是ES6引入,声明的变量只在代码块有效,不影响同名块外变量) - Swift:
var varA:Int
,var varA = 42
- Go:
var varA int
,var varA = 42
,varA := 42
Swift 可选(Optionals)类型
Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x “或者"那儿没有值”。
Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)。
var myString:String?
myString = "Hello, Swift!"
print(myString)//正常输出
print( myString! )// 强制解析
程序执行结果为:
Optional("Hello, Swift!")
Hello, Swift!
常量
- Java:使用 final 关键字来修饰常量,
final int CONSTA = 42;
- C, C++:
#define CONSTA 42
,const int CONSTA = 42;
- C#:
const int constA = 42;
- PHP:
define("CONSTA", 42);
- JS:
const constA=42;
(ES6引入) - Swift:
let constA = 42
- Go:
const CONSTA int = 42
,const CONSTA = 42
运算符
- 算术运算符:
+
,-
,*
,/
,%
,++
(Swift3取消),--
(Swift3取消) - 关系运算符:
==
,!=
,>
,<
,>=
,<=
,===
(绝对等于,PHP、JS特有),!==
(绝对不等于,PHP、JS特有),<>
(不等于,PHP特有) - 逻辑运算符:
&&
与,||
或,!
非,(PHP特有:and
,or
,xor
) - 位运算符:
&
与,|
或,^
异或,~
反,<<
左移,>>
右移,>>>
右移补0(Java特有) ,(PHP、JS没有位运算符) - 赋值运算符:
=
,+=
,-=
,*=
,/=
,%=
,<<=
,>>=
,&=
,^=
,|=
, (PHP、JS没有移位和逻辑赋值) - 其他运算符:
? :
(条件运算符,JS、Go没有)instanceof
(检查对象类型,Java特有)&
(返回变量地址,C、C++、C#、Go特有)*
(指针变量,C、C++、C#、Go特有)sizeof()
(返回字节数,C、C++、C#特有),
(顺序执行一系列运算,只返回最后表达式的值,C++特有)Cast
(强制转换,C++特有)).=
(连接字符串,PHP特有)typeof()
(返回class类型,C#特有)is
(检查对象类型,C#特有),as
(强制转换,C#特有)
判断
if(布尔表达式){
//Swift、Go表达式外面没括号
//如果布尔表达式为true将执行的语句
}
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//PHP也可以写成elseif
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}
}
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
循环
//好像Go没有
while( 布尔表达式 ) {
//循环内容
}
//Swift不用do,用repeat
//好像Go没有
do {
//代码语句
}while(布尔表达式);
//Swift3已弃用
//for(初始化; 布尔表达式; 更新)
for(int x = 10; x < 20; x = x+1) {
//代码语句
}
//for/in Java5以上
//for(声明语句 : 表达式)
for(int x : numbers ){
//代码句子
}
for(Iterator i = list.iterator(); i.hasNext(); ) {
Object listElement = i.next();
}
//forEach,Java8以上
List<Integer> numbers = new ArrayList<>();
numbers.forEach((Integer integer) -> {
//第一种
System.out.println(integer);
});
numbers.forEach(integer -> {
//第二种
System.out.println(integer);
});
numbers.forEach(integer -> System.out.println(integer));//第三种
numbers.forEach(System.out::println);//第四种
numbers.forEach(new MyConsumer());第五种,基于MyConsumer类
class MyConsumer implements Consumer<Integer>{
@Override
public void accept(Integer integer) {
System.out.println(integer);
}
}
//stream,Java8以上
arrayList.stream().filter(i -> i > 0);
arrayList.stream().forEach(s -> System.out.println(s));
//C#
foreach (int element in fibarray){
System.Console.WriteLine("Element #{0}", element);
}
//PHP
foreach ($array as $value){
//要执行代码;
}
//JS
for (x in person){
// x 为属性名
txt=txt + person[x];
}
//Swift
for index in 1...5 {
print("\(index) 乘于 5 为:\(index * 5)")
}
var someInts:[Int] = [10, 20,