上位机编程命名规范

1.大小写规范

文件名全部小写是一种广泛使用的命名约定,特别是在跨平台开发和开源项目中。主要原因涉及技术约束可读性一致性等方面。以下是原因和优劣势的详细分析:

1. 避免跨平台问题

  • 不同操作系统对文件名的大小写处理方式不同:
    • Linux/Unix:区分大小写(myfile.hMyFile.h 是不同文件)。
    • Windows/macOS:不区分大小写(两者会被视为同一文件)。
  • 如果项目需要跨平台运行,使用全小写文件名可以避免文件名冲突或加载失败的问题,特别是在代码仓库中常见。

2. 提高可读性

  • 小写文件名简单直观,适合大量文件快速查找。
  • 避免了混合大小写可能导致的歧义或视觉复杂性。

3. 一致性和规范

  • 全小写是一种约定俗成的风格,在许多大型开源项目中(如 Linux 内核、Python 标准库)被广泛使用。
  • 使用一致的命名风格有助于团队协作和代码维护。

4. 减少输入复杂性

  • 对开发者而言,全小写文件名减少了在键盘上切换大小写的需求,提高了效率。

5. 配合文件扩展名

  • 通常文件名小写配合小写扩展名(如 .h, .cpp, .json),使整体风格统一:
    main.cpp
    config.json
    utils.h
    

劣势

  1. 不够直观:
    • 对于复杂的模块或类,全部小写的文件名可能降低语义清晰度。
    • 示例:parserconfig.cpp vs ParserConfig.cpp,后者可能更易理解。
  2. 不符合某些项目习惯:
    • 如 Qt 的文件名通常使用 PascalCase,与类名保持一致,方便文件与类的直接关联。

适用场景

  1. 全小写文件名的典型场景:

    • 开源项目(Linux 内核、开源库等)。
    • 配置文件或资源文件:
      • settings.json
      • logo.png
    • 小型或工具类项目(简单直接,文件名通常描述模块功能)。
  2. 大小写混合的典型场景:

    • 面向对象编程,文件名对应类名(如 Qt)。
    • 框架开发或企业内部项目,文件命名需反映模块层级。

案例分析

全小写文件名:
  • Linux 内核

    • 文件名如:main.c, sched.c, config.h
    • 风格:
      • 清晰、简单、无歧义。
      • 不直接对应类名,而是按功能模块划分。
  • Python 标准库

    • 文件名如:os.py, socket.py, configparser.py
类名一致的文件名(大小写混合):
  • Qt

    • 文件名如:MainWindow.cpp, MainWindow.h
    • 风格:
      • 文件名与类名一致,有助于在面向对象开发中快速定位。
  • C# 项目

    • 文件名如:DataService.cs, UserModel.cs
    • 风格:
      • 与类名、命名空间一一对应,模块结构清晰。

总结建议

  1. 根据项目类型选择风格:

    • 如果是跨平台工具类或开源项目,建议使用全小写风格。
    • 如果是面向对象的企业项目,建议文件名与类名一致,使用 PascalCase。
  2. 保持一致性:

    • 项目中应统一命名风格,无论是全小写还是大小写混合,以避免混乱。
  3. 团队协作:

    • 在团队开发中,可在项目初期通过编码规范文档明确文件命名规则。

2.Qt相关命名

Qt 的命名规范是基于清晰、简洁和一致性的原则设计的,方便开发者阅读和维护代码。以下是 Qt 的命名规则和推荐的最佳实践:


1. 类名

  • 规则:使用 PascalCase(首字母大写,每个单词的首字母都大写)。

  • 示例

    • QWidget
    • QMainWindow
    • QString
  • 自定义类名

    • 应与 Qt 内置类区分开,可在类名前加自定义前缀。
    • 示例:
      • 项目名为 MyApp
        • MyAppWindow
        • MyAppButton

2. 变量名

  • 规则:使用 camelCase(小写开头,每个单词的首字母大写)。

  • 成员变量

    • 前加前缀 m_ 表示成员变量,避免与局部变量冲突。
    • 示例:
      class MyClass {
      private:int m_value;QString m_name;
      };
      
  • 静态变量

    • 前加前缀 s_ 表示静态变量。
    • 示例:
      static int s_counter;
      
  • 局部变量

    • 使用纯 camelCase,无前缀。
    • 示例:
      int counter = 0;
      

3. 函数名

  • 规则:使用 camelCase,首字母小写,每个单词的首字母大写。

  • 示例

    • void calculateSum();
    • QString getUserName();
    • bool isValid();
  • 特殊约定

    • setter 和 getter 函数:
      • setterset<PropertyName>(),如 setName()
      • getterget<PropertyName>() 或直接使用属性名,如 name()
    • 布尔值相关函数通常以 ishas 开头:
      • bool isRunning();
      • bool hasError();

4. 宏定义

  • 规则:使用 全大写,单词间用下划线分隔(SNAKE_CASE)。

  • 示例

    #define MY_CUSTOM_MACRO
    #define MAX_BUFFER_SIZE 1024
    
  • Qt 内置宏

    • Q_ 开头,如 Q_OBJECT, Q_PROPERTY.

5. 枚举类型

  • 规则:枚举类型名使用 PascalCase,枚举值使用 PascalCase 或全大写(根据风格)。

  • 示例

    enum Color {Red,Green,Blue
    };
    

    或:

    enum ErrorCode {ERROR_NONE,ERROR_NOT_FOUND,ERROR_INVALID
    };
    
  • 枚举类(C++11 引入的 enum class)推荐使用 PascalCase:

    enum class LogLevel {Debug,Info,Warning,Error
    };
    

6. 命名空间

  • 规则:命名空间使用 小写,单词间用下划线分隔(snake_case)。
  • 示例
    namespace my_app {class MainWindow { ... };
    }
    

7. 信号和槽

  • 规则:信号和槽函数名使用 camelCase,与普通函数一致。
  • 示例
    • 信号:
      signals:void dataChanged();void errorOccurred(int errorCode);
      
    • 槽:
      slots:void onButtonClicked();void handleDataUpdate();
      

8. 文件名

  • 规则

    • 考虑到跨平台的需求,全部为小写
    • 头文件扩展名为 .h,源文件扩展名为 .cpp
    • 示例:
      • 类名 MainWindow
        • mainwindow.h
        • mainwindow.cpp
  • 特殊文件

    • 与 Qt 模块相关的文件通常有明确的前缀:
      • mainwindow.ui(UI 文件)
      • resources.qrc(资源文件)

9. 常量

  • 规则:使用 kPascalCase(以 k 开头,PascalCase 命名)。
  • 示例
    const int kMaxValue = 100;
    const QString kDefaultName = "QtUser";
    

10. 命名约定示例汇总

以下是一个符合 Qt 命名规范的代码片段:

#ifndef MYCLASS_H
#define MYCLASS_H#include <QObject>
#include <QString>class MyClass : public QObject {Q_OBJECTpublic:explicit MyClass(QObject *parent = nullptr);~MyClass();void setName(const QString &name);QString name() const;signals:void nameChanged();private:QString m_name;static int s_instanceCount;
};#endif // MYCLASS_H

11. Qt 风格检查工具

  • Clazy:Qt 的静态代码分析工具,可帮助检测违反命名规范或其他潜在问题。
  • Clang-Tidy:支持配置规则,适合 C++ 开发者。

通过遵守以上规范,可以提高代码的可读性和一致性。如果有特定需求或项目风格,也可以在此基础上进行调整! 😊

3.json文件命名

在命名 JSON 文件时,建议遵循清晰、简洁和一致的命名规则,以便更易于理解和管理。以下是一些常见的命名格式和建议:


1. 一般命名规则

  • 小写命名
    使用小写字母,单词间用下划线连字符分隔,便于跨平台使用,尤其在区分大小写的系统中(如Linux)。

    • 示例:
      • user_data.json
      • config-settings.json
  • 基于功能命名
    文件名应该能明确表示文件的内容或用途。

    • 示例:
      • settings.json(通用配置)
      • user_profiles.json(用户数据)
      • error_log.json(错误日志)
  • 添加时间戳(可选)
    对需要区分版本或生成时间的文件,建议添加时间戳,格式一般为YYYYMMDDYYYY-MM-DD

    • 示例:
      • backup_20241118.json
      • report-2024-11-18.json
  • 添加环境标识(可选)
    区分开发、测试和生产环境时,可在文件名中包含环境标识,如devtestprod

    • 示例:
      • config_dev.json
      • settings_prod.json

2. 命名格式建议

a. 下划线格式 (snake_case)
  • 常见于后端开发和Linux系统。
    • 示例:app_config.json, user_data_backup.json
b. 连字符格式 (kebab-case)
  • 常见于前端开发,符合Web文件名习惯。
    • 示例:app-config.json, user-data.json
c. 驼峰式格式 (camelCase)
  • 用于JavaScript或其他以驼峰式为主的项目中,但不建议用作文件名(兼容性较差)。
    • 示例:appConfig.json, userData.json
d. PascalCase格式
  • 少用,可能适合特殊命名需求。
    • 示例:AppConfig.json, UserData.json

3. 实际应用场景

a. 配置文件
  • 文件名:config.json, app_settings.json, database_config.json
  • 用途:存储应用程序的配置数据。
b. 日志文件
  • 文件名:error_log_20241118.json, system_status.json
  • 用途:记录系统运行状态或错误信息。
c. 数据文件
  • 文件名:user_profiles.json, sales_data_2024.json
  • 用途:存储业务相关的结构化数据。
d. 国际化文件
  • 文件名:en_us.json, zh_cn.json, fr_fr.json
  • 用途:用于存储多语言翻译内容。

4. 不建议的命名方式

  • 空格
    文件名中不要使用空格,用下划线或连字符替代。

    • 不推荐:user data.json
    • 推荐:user_data.jsonuser-data.json
  • 特殊字符
    避免使用如 !@#$%^&*() 等特殊字符,可能引发跨平台兼容性问题。

  • 过长的文件名
    避免文件名过长,限制在 30 字符以内为宜,保持简洁。


总结命名模板

<用途>_<模块名>_<时间戳>_<环境标识>.json
  • 示例:
    • config_dev_20241118.json(开发环境配置文件)
    • user_profiles_2024.json(用户数据)
    • error_log_test.json(测试环境错误日志)

如果需要更具体的建议,请告诉我您的场景! 😊

4.json变量命名

JSON 文件内部的键值对命名是保证数据结构清晰、可维护的关键。不同场景中可能需要不同的命名规则,但通常遵循一致性和规范化原则。以下是具体建议和常见命名方式:


1. 一般命名规则

a. 使用小写或驼峰式(camelCase)
  • 小写+下划线(snake_case)

    • 常用于后端开发,清晰易读,适合静态配置或跨语言系统。
    • 示例:user_name, account_status, created_at
  • 驼峰式(camelCase)

    • 常用于前端开发或动态语言(如JavaScript),更符合JSON的流行风格。
    • 示例:userName, accountStatus, createdAt
b. 避免空格和特殊字符
  • 键名中不要使用空格或特殊字符。
    • 不推荐:user name, account-status!
    • 推荐:user_nameuserName
c. 使用简洁且具有描述性的名称
  • 确保键名简短,同时清晰地表达其意义。
    • 不推荐:userAllDetails
    • 推荐:user_infouser_details
d. 保持一致性
  • 在同一文件或项目中,始终遵循统一的命名规则(如所有键均使用snake_case或camelCase)。

2. 常见命名方式

a. 时间和日期字段
  • created_atcreatedAt(创建时间)
  • updated_atupdatedAt(更新时间)
  • last_loginlastLogin(最后登录时间)
  • 格式值通常为 ISO 8601 标准,例如:"2024-11-18T12:30:00Z"
b. 用户相关
  • user_iduserId(用户ID)
  • user_nameuserName(用户名)
  • email(邮箱)
  • phone_numberphoneNumber(电话号码)
c. 状态或标志
  • is_activeisActive(是否活跃,布尔值)
  • status(状态,例如:active, inactive
  • error_codeerrorCode(错误码)
d. 其他常用字段
  • 数字字段:price, count, quantity
  • 位置字段:latitude, longitude, address
  • 配置字段:config_version, setting_name

3. 命名约定示例

a. 小写+下划线风格(snake_case)
{"user_id": 123,"user_name": "Alice","email": "alice@example.com","created_at": "2024-11-18T12:30:00Z","is_active": true
}
b. 驼峰式(camelCase)
{"userId": 123,"userName": "Alice","email": "alice@example.com","createdAt": "2024-11-18T12:30:00Z","isActive": true
}
c. PascalCase(不常用,但部分场景适合)
{"UserId": 123,"UserName": "Alice","Email": "alice@example.com","CreatedAt": "2024-11-18T12:30:00Z","IsActive": true
}

4. 键值对分类及分组

  • 分层结构:将相关数据分组,避免平铺式结构造成混乱。
    • 不推荐:
      {"user_id": 123,"user_name": "Alice","address_street": "Main St","address_city": "New York"
      }
      
    • 推荐:
      {"user_id": 123,"user_name": "Alice","address": {"street": "Main St","city": "New York"}
      }
      

5. 值的类型

  • 布尔值:用is_has_前缀命名,表示状态或属性。

    • 示例:is_active, has_access
  • 列表或数组:用复数形式命名键。

    • 示例:users, products, order_items
  • 数值:尽量明确表示单位(如价格、长度)。

    • 示例:price_usd, length_cm

6. 命名模板

<实体>_<描述>_<属性>
  • 示例:
    • user_name(用户的名称)
    • order_total_price(订单总价)
    • device_status(设备状态)

通过这些规则和示例,你可以设计清晰、易读的 JSON 键值对结构。如果有具体的应用场景,可以进一步优化! 😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61404.shtml

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

相关文章

JAVA:探索 PDF 文字提取的技术指南

1、简述 随着信息化的发展&#xff0c;PDF 文档成为了信息传播的重要媒介。在许多应用场景下&#xff0c;如数据迁移、内容分析和信息检索&#xff0c;我们需要从 PDF 文件中提取文字内容。JAVA提供了多种库来处理 PDF 文件&#xff0c;其中 PDFBox 和 iText 是最常用的两个。…

form表单的使用

模板 <template><el-form :model"formData" ref"form1Ref" :rules"rules"><el-form-item label"手机号" prop"tel"><el-input v-model"formData.tel" /></el-form-item><el-f…

【priority_queue的使用及模拟实现】—— 我与C++的不解之缘(十六)

前言 ​ priority_queue&#xff0c;翻译过来就是优先级队列&#xff0c;但是它其实是我们的堆结构&#xff08;如果堆一些遗忘的可以看一下前面的文章复习一下【数据结构】二叉树——顺序结构——堆及其实现_二叉树顺序结构-CSDN博客&#xff09;&#xff0c;本篇文章就来使用…

php 与 thinkphp 13 张 表 关联 查询,a.pry_key=b.pry_key and c.pry_key= b.pry_key 代码示例

在 PHP 中&#xff0c;假设你有 13 张表并且这些表之间通过 pry_key 关联&#xff0c;你可以使用 SQL 的 JOIN 来将这些表连接在一起&#xff0c;然后通过 PHP 执行该查询。以下是一个简化的示例&#xff0c;展示如何通过 JOIN 语句将 13 张表联接&#xff0c;并使用 PHP 代码执…

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意&#xff0c;我们使用的是Mac&#xff0c;所以ios pack并不能使用。 如何嫌官网上下载比较慢的话&#xff0c;可以考虑在csdn网站上下载&#xff0c;应该也是可以找到的。 2、cmake的下载 官网的链接&…

Kibana 本地安装使用

一 Kibana简介 1.1 Kibana 是一种数据可视化工具&#xff0c;通常需要结合Elasticsearch使用&#xff1a; Elasticsearch 是一个实时分布式搜索和分析引擎。 Logstash 为用户提供数据采集、转换、优化和输出的能力。 Kibana 是一种数据可视化工具&#xff0c;为 Elasticsear…

#Js篇:JSON.stringify 和 JSON.parse用法和传参

JSON.stringify 和 JSON.parse 1. JSON.stringify JSON.stringify 方法将一个 JavaScript 对象或数组转换为 JSON 字符串。 基本用法 const obj { name: "Alice", age: 25 }; const jsonString JSON.stringify(obj); console.log(jsonString); // 输出: {"…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

Android kotlin之配置kapt编译器插件

配置项目目录下的gradle/libs.versions.toml文件&#xff0c;添加kapt配置项&#xff1a; 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…

【FAQ】HarmonyOS SDK 闭源开放能力 —Share Kit

1.问题描述&#xff1a; 使用系统分享组件分享本地文件&#xff0c;点击分享菜单下方的“另存为” 将要分享的文件分享至系统文件管理中&#xff0c;在文件管理中查看分享进来的文件为0B。尝试了3种uri的写法都不行&#xff0c;代码如下&#xff1a; const uri getContext()…

音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现

一、引言 从《音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;3&#xff09;——TS Header简介》可以知道&#xff0c;TS格式有三种&#xff1a;分别为transport packet长度固定为188、192和204字节。而FFmpeg源码中是通过read_packet函数从一段MPEG2-TS传输流/TS文件中读…

HarmonyOs DevEco Studio小技巧31--卡片的生命周期与卡片的开发

Form Kit简介 Form Kit&#xff08;卡片开发服务&#xff09;提供一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到服务卡片&#xff08;以下简称“卡片”&#xff09;&#xff0c;以达到服务直达、减少跳转层级的体验效果。卡片常用于嵌入到其他应用&#xff0…

《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》

在当今数字化时代&#xff0c;图形界面程序的性能至关重要。使用 C20 开发图形界面程序时&#xff0c;优化界面响应速度和图形渲染效率是我们必须关注的焦点&#xff0c;这直接影响用户体验和程序的实用性。 一、理解界面响应速度和图形渲染效率的重要性 对于图形界面程序&am…

Spring Boot应用开发实战:构建高效、可维护的Web应用

Spring Boot应用开发实战:构建高效、可维护的Web应用 在当今快速迭代的软件开发环境中,Spring Boot凭借其“约定优于配置”的理念,迅速成为Java开发者构建微服务及Web应用的首选框架。它不仅简化了Spring应用的初始搭建以及开发过程,还通过自动配置、嵌入式服务器等特性,…

软件测试之测试用例扩展

软件测试之测试用例扩展 1. 测试用例覆盖2. UI布局覆盖3. 兼容性覆盖4. 测试用例条数 1. 测试用例覆盖 规则覆盖UI布局兼容性 2. UI布局覆盖 2条用例即可 布局, 颜色与原型图一致图片和文字描述无误 3. 兼容性覆盖 测试5大浏览器 火狐谷歌ieEge苹果 4. 测试用例条数 使…

【GeekBand】C++设计模式笔记11_Builder_构建器

1. “对象创建” 模式 通过 “对象创建” 模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式 Factory MethodAbstract …

Ubuntu问题 - 显示ubuntu服务器上可用磁盘空间 一条命令df -h

目的 想要放我的 数据集 到新的ubuntu服务器中, 不知道存储空间够不够 开始 使用以下命令直接查看 df -h

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录&#xff08;Record&#xff09;类型 使用方式&#xff1a; public record Person(string FirstName, string LastName); 适用场景&#xff1a;当需要创建不可变的数据结构&#xff0c;且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景&#xff1a;当数据结构需…