当前位置: 首页 > article >正文

变量声明是否可以放在语句之后?变量声明?声明变量一定需要指定类型吗?函数范围快捷使用临时变量?

变量声明是否可以放在语句之后?

  • 除了C89必须将变量声明放在语句之前,其他主流编程语言基本都支持变量声明和语句混合使用。
  • Fortran/C89/Pascal 只能将变量声明放在语句之前。
    准确的说,Pascal的变量声明必须放在程序的说明定义部分,即程序首部之后,执行部分之前。
  • C99/C++/Java/C# 等语言允许变量声明放在语句之后。
  • ObjC根据所用Clang/GCC版本决定是否允许声明在语句之后。
  • Python/JS 作为解释型语言,自然允许声明/定义在语句之后。

变量声明放在开始的好处

  • 变量声明统一放在函数开始,有一个好处是很清晰,使用到哪些变量很好维护。

变量声明

声明有的时候很有作用,大国对抗所谓的"声明"其实就是赤裸裸的"威胁",但声明显得更文明。

不同语言的声明

  • 越古早的语言,越需要声明,越像脚本的语言,越对声明不严格。
  • Perl需要显式声明变量。
  • PHP不需要显式声明变量,声明可以和赋值同时进行。
  • Python是Shell的改进版,不需要特别声明,想用就直接用。
  • C/ObjC/C++/Java/C#/Rust/Go/Swift/仓颉/VB/Fortran/Pascal 都需要先声明(或者被绑定),才能使用。
  • JS比较特殊,大部分情况下都需要先用let或var声明变量再使用,但可以在不声明变量的情况下直接赋值,这会导致该变量被隐式地创建为全局变量,大概率不是预期。
    • 比如在没声明a的前提下给a赋值,创建了一个全局变量:a = 1

变量声明的默认值?

  • C/ObjC/C++变量声明但未初始化,默认值是不确定的。
  • Java基本变量只声明不初始化,就使用,编译器会报错。注意,如果是类成员变量,对象初始化后成员没有显式初始化,默认值是0.

变量声明缺省类型?

对于支持缺省类型的编程语言,初始化可以用缺省类型,但如果是声明,缺省类型就不能缺少。

  • Swift/仓颉 等编程语言的变量声明,必须指定类型,因为编译器不知道缺省类型。

变量前缀

  • 大部分编程语言变量不需要有特别前缀。
  • PHP变量需要有$前缀,例如$result.

声明变量一定需要指定类型吗?

早期编程语言都需要指定变量类型,随着编程语言不断发展,新的编程语言允许编译器自动推导变量类型,允许不指定变量类型。

  • C/ObjC声明变量必须指定类型。
  • C++ 11 (2011年)引入auto关键字,可自动推导类型。
  • C# 3.0 (2007年)引入var关键字可自动推导类型。这种变量也被称为隐式类型的局部变量,和C++ auto类似。
    当然,不止是简单类型变量,对于一些组合的复杂类型,var可避免单独定义类型。当然,元组也可以解决这种需求,根据需要而选。
  • Java 10 (2018年)引入var关键字,同样可以自动推导类型。
  • Python/Shell/JS 之类的解释型语言,根本无需指定变量类型,解释器会默默分析。
  • VB 8之前声明变量必须指定类型,VB 9(包括)之后不一定要指定,可选择编译器自动推导类型。
  • Go/Rust/Swift/仓颉 都可选择由编译器自动推导类型。

var类型

不同编程语言可能有var类型,但它们可能是不同含义。

  • C# var声明方便了程序员不用写实际类型,但编译器会自动判断出实际类型,编译的IL代码和用实际类型没区别。
    • 类似的,Go/Rust有自动类型推导,和C#一样,编译器会推导出类型。
    • JS的var就截然不同,它仅仅代表一种类型,编译器并没有看到var推导更多信息,只是作为变量声明或定义的标志。

函数范围快捷使用临时变量?

对于脚本语言或解释型语言,变量甚至不需要加类型,即开即用。对于不少编译型语言而言,函数范围使用临时变量依然需要加上类型,这是语法绕不掉的。尽管如此:

  • Go语言提供了便捷的函数范围使用临时变量的新语法 ":=", 节省了类型定义的负担,也被称为"短变量声明", 注意,仅可用于函数范围。例如:
    • func test() {
      i := 1
      // ......
      }


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.kler.cn/a/526543.html

相关文章:

  • Spring Boot - 数据库集成05 - 集成MongoDB
  • 力扣面试150 快乐数 循环链表找环 链表抽象 哈希
  • Vue.js `setup()` 函数的使用
  • C++并发编程指南04
  • k8s支持自定义field-selector spec.hostNetwork过滤
  • 嵌入式知识点总结 ARM体系与架构 专题提升(三)-中断与异常
  • 低代码产品插件功能一览
  • 火语言RPA--Http请求
  • 《Origin画百图》之同心环图
  • 大数据相关职位 职业进阶路径
  • 【重生之我在学习C语言指针详解】
  • 视频编辑系列——Shotcut如何裁切视频黑边并放大画面导出
  • 【练习】PAT 乙 1027 打印沙漏
  • python-leetcode-填充每个节点的下一个右侧节点指针 II
  • 基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.20 极值追踪:高效获取数据特征的秘诀
  • TypeScript 学习 - 单元测试
  • C++ 指针
  • Linux中基础开发工具(yum,vim,gcc/g++,git,gdb/cgdb)
  • SOME/IP--协议英文原文讲解3
  • DeepSeek R1-Zero vs. R1:强化学习推理的技术突破与应用前景
  • 认知神经科学0-----关于心智的生物学(2011年第三版)
  • 智达方通如何帮助企业更好地应对数字化转型
  • Golang —协程池(panjf2000/ants/v2)
  • 智慧园区如何融合五大技术实现全方位智能管理与服务创新
  • 一文了解视觉Transformer解析 !!