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

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

  • 除了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.mzph.cn/news/894157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电工基础】1.电能来源,触电伤害,触电预防,触电急救

一。电能来源 1.电能来源 发电-》输电-》变电-》配电 2.分配电 一类负荷 如果供电中断会造成生命危险,造成国民经济的重大损失,损坏生产的重要设备以致使生产长期不能恢复或产生大量废品,破坏复杂的工艺过程,以及破坏大…

简易计算器(c++ 实现)

前言 本文将用 c 实现一个终端计算器: 能进行加减乘除、取余乘方运算读取命令行输入,输出计算结果当输入表达式存在语法错误时,报告错误,但程序应能继续运行当输出 ‘q’ 时,退出计算器 【简单演示】 【源码位置】…

python-leetcode-从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right r…

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-head.py

head.py ultralytics\nn\modules\head.py 目录 head.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class Segment(Detect): 4.class OBB(Detect): 5.class Pose(Detect): 6.class Classify(nn.Module): 7.class WorldDetect(Detect): 8.class RTDETRDec…

知识推理简要介绍

知识推理(Knowledge Reasoning)是人工智能(AI)、认知科学和逻辑学的核心领域,其本质是通过对已有知识的逻辑化处理与规则化推导,生成新的知识或结论。它不仅是机器智能的基石,也是人类认知能力的核心体现。 一、知识推理的定义与本质 定义 知识推理是通过形式化逻辑规则…

NLP深度学习 DAY4:Word2Vec详解:两种模式(CBOW与Skip-gram)

用稀疏向量表示文本,即所谓的词袋模型在 NLP 有着悠久的历史。正如上文中介绍的,早在 2001年就开始使用密集向量表示词或词嵌入。Mikolov等人在2013年提出的创新技术是通过去除隐藏层,逼近目标,进而使这些单词嵌入的训练更加高效。…

vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列

最近在家过年闲的没事,于是研究起深度学习开发工具链的配置和安装,之前欲与天公试比高,尝试在win上用vscodecuda11.6vs2019的cl编译器搭建cuda c编程环境,最后惨败,沦为笑柄,痛定思痛,这次直接和…

深入了解 npm 和 pnpm:前端包管理工具的选择与比较

在现代前端开发中,包管理工具已经成为了必不可少的组成部分。它们帮助我们管理项目的依赖、自动化任务、以及在团队协作时确保一致的开发环境。最常见的前端包管理工具有 npm 和 pnpm,它们各自具有独特的特点和优势。今天,我们就来一起深入了…

剑指 Offer II 011. 0 和 1 个数相同的子数组

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20011.%200%20%E5%92%8C%201%20%E4%B8%AA%E6%95%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84/README.md 剑指 Offer II 011. 0 和 1 个数相同的子…

【MQ】RabbitMq的可靠性保证

消息队列中的可靠性主要是分为三部分: 消息不丢失:确保消息从生产者发送到消费者消息不丢失消息不重复:确保消息不被重复消费消息顺序性:确保消费的顺序性 解决方案主要有以下几部分: 消息不丢失 生产者确认机制持久…

Jason配置环境变量

jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统,请按照以下具体步骤操作 视窗 下载 Jason 的最新版本,选择“jason-bin-3.3.0.zip”…

SpringBoot 日志与配置文件

SpringBoot 配置文件格式 Properties 格式 Component ConfigurationProperties(prefix "person") //和配置文件person前缀的所有配置进行绑定 Data public class Person {private String name;private Integer age;private Date birthDay;private Boolean like;pr…

【Elasticsearch】 Intervals Query

Elasticsearch Intervals Query 返回基于匹配术语的顺序和接近度的文档。 intervals 查询使用 匹配规则,这些规则由一小组定义构建而成。这些规则然后应用于指定 field 中的术语。 这些定义生成覆盖文本中术语的最小间隔序列。这些间隔可以进一步由父源组合和过滤…

HarmonyOS DevEco Studio模拟器点击运行没有反应的解决方法

HarmonyOS DevEco Studio模拟器点击运行没有反应的解决方法 翻遍了CSDN,试了所有办法都没办法,最后偶然间竟然解决了 解决方法其实很简单:本地模拟器下载路径下面不能有中文。。。。。 切换正确路径以后,成功运行,哦…

删除数组中的重复项(leetcode刷题)

题目描述: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的…

网站快速收录:优化图片与视频的SEO策略

本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/29.html 优化图片与视频的SEO策略对于网站快速收录至关重要。以下是一些具体的策略,旨在提高图片与视频在搜索引擎中的可见性和收录率: 一、图片SEO优化策略 选择合…

虚幻基础16:locomotion direction

locomotion locomotion:角色运动系统的总称:包含移动、奔跑、跳跃、转向等。 locomotion direction 玩家输入 玩家输入:通常代表玩家想要的移动方向。 direction 可以计算当前朝向与移动方向的Δ。从而实现朝向与移动(玩家输入)方向的分…

单片机基础模块学习——超声波传感器

一、超声波原理 左边发射超声波信号,右边接收超声波信号 左边的芯片用来处理超声波发射信号,中间的芯片用来处理接收的超声波信号 二、超声波原理图 T——transmit 发送R——Recieve 接收 U18芯片对输入的N_A1信号进行放大,然后输入给超声…

基于 NodeJs 一个后端接口的创建过程及其规范 -- 【elpis全栈项目】

基于 NodeJs 一个后端接口的创建过程及其规范 一个接口的诞生: #mermaid-svg-46HXZKI3fdnO0rKV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46HXZKI3fdnO0rKV .error-icon{fill:#552222;}#mermaid-sv…

MySQL(高级特性篇) 14 章——MySQL事务日志

事务有4种特性:原子性、一致性、隔离性和持久性 事务的隔离性由锁机制实现事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证(1)REDO LOG称为重做日志,用来保证事务的持久性(2)UNDO LOG称为回…