微软的改名大法

本文回顾了微软发展历程中产品的多次更名,从操作系统到应用框架,再到互联网服务,展现了微软不断革新的一面。

改名的过程也是革新的过程。大到”苹果电脑公司“被改名为”苹果公司”,小到大学的校名更迭。甚至个人网名的更换也能印证其成长的岁月。

联想收购ThinkPad和摩托罗拉之后都留了原名让粉丝们得到了些许安慰,不过我认为联想的ThinkPad远不如IBM的。至今依旧怀恋我的T30的键盘手感。

今天又有消息称微软要进行改名。计划用“Windows Apps”来替代现有的“Universal Apps”,而传统的Windows桌面应用被改名为“Windows Desktop Application”。改变的不仅仅是五十万个移动应用的称谓,更有存在数十年数以百万计的桌面应用。纵观微软历史,一直以来便有改名的爱好,曾被网友调侃其内部有专业的“改名部”。

不光是面向主流、消费者的名称改名,开发者所用的微软技术的名字也是五花八门。就只算在应用商店里的应用的开发框架就有Silverlight、WinRT,与通用应用等。

早期的PDA上,微软直接使用了Windows CE作为系统名称,之后因为Pocket PC作为手机的流行,便被改为Windows Mobile。虽然当时我还太小,但于网络中还是知道了这个WP8的前辈。这个操作系统算是微软的一个进步,从功能机往智能机发展,微软也于多年前推出了Windows CE版的平板电脑。当时将平板定义也是要求运行Windows,至于iPad因此也无法叫做Pad,而该叫做Tablet 。就像Mac不是PC一般。虽说如此,历史上PC的名声并不比Mac好。

随后iPhone的面世让Window Mobile陷入低迷,微软又于2010年10月发布了Windows Phone 7。Windows Phone 8虽说不算是改名,不过由Windows CE转到Windows NT也算是让部分网友刻骨铭心了。我也有一部Nokia Lumia 800。后来,还记得吗,微软在Lumia 930和HTC One M8 for Windows的广告中都用了Windows替代Windows Phone。至于现在Windows 10已经将这些全部都统一起来了,期间还有许多非官方的称呼,比如Win10 for Phone。而Windows 9也从未出现。而Nokia Lumia,现已被改为微软Lumia。诺基亚部门在微软也被改名为微软移动。

5年前我曾注册了一个MSN账号,而之间账号密码皆被忘记。中国用MSN的的确太少,不过香港和台湾其实蛮多的吧,经常在电影中看到。另外Facebook在香港、台湾都是主流。MSN于2013年3月15日在除了中国内地以外的全球范围内关闭了即时通讯软件MSN Messenger,由Skype取而代之。这一过程于2014年10月31日发生在中国大陆。而2014年10月1日,微软又推出重新改版后的MSN门户主页。至于微软最早的搜索引擎,也就是MSN搜索,在2006年却被改名为Windows Live Search,没过多久微软又将Windows去掉直呼Live Search。2009年再度被改名为Bing。记得09年看到一个必应的网站,一开始甚至以为是中国的。

还有被盖茨亲自收购的Hotmail,也于2012年被改名为Outlook。有趣的是,其Twitter官方账号发布统计数据称更名后6小时注册用户就已突破100万。微软旗下最有潜力的软件之一Azure,也在2014年3月被从Windows Azure改名为Microsoft Azure。

或许很多人并不知道,Surface这个名称在10年前就被微软用于40寸的桌面触控设备中。甚至还有两个因为奇葩的品牌商标权问题而改名的产品。云服务SkyDrive于去年被改名为OneDrive,Windows 8中的Metro界面也被Modern界面所取代。

前不久传出IE退休,也引来一阵怀旧。在经历无数吐槽之后终于倒下了,而我想说,IE11明明就很美观!简洁实用。虽然对于更专业的用户,Chrome等可能更适合,但用于办公、网上冲浪等IE11明明就好用。



感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.youkuaiyun.com/nomasp


<think>嗯,用户要求用举例的方式解释匈牙利命名法。从用户提供的引用材料看,ta已经掌握了基本概念,现在需要具体示例来加深理解。用户可能正在学习编程规范,或是遇到了需要阅读使用匈牙利命名法的旧代码的情况。 回顾引用资料的关键点:匈牙利命名法通过变量名前缀标识类型(如i表示整数),在微软系代码中曾广泛使用。但引用[4]也指出它并非万能,尤其在Unix环境下会造成输入负担。用户真正需要的不是历史背景,而是看到前缀如何与实际变量名结合。 准备用双层结构举例:基础类型(如i/c/f)和扩展类型(如arr/b/bIs)。这样既能展示经典用法,又能体现实际项目中的变体。考虑到用户可能是初学者,例子要选日常可见的变量:年龄(整数)、名字(字符)、身高(浮点)、数组等。 特别提醒自己标注"现代不常用"很重要,避免用户误以为这是当前主流规范。最后补充替代方案(骆驼命名法)的对比,帮助用户建立完整认知框架。相关问题设计成阶梯式:从溯源到批判性思考,再到现代实践,引导用户深入探索。 </think>好的,我们来通过具体的例子解释匈牙利命名法(Hungarian Notation)。 **核心思想:** 在变量名前加上简短的前缀(通常是缩写),用来表示该变量的**类型**或**作用域/含义**,以提高代码可读性,让开发者一眼就能看出变量的基本属性。 **常见前缀类型举例:** 1. **基础数据类型(Type Prefixes):** 表示变量的**数据类型**。 * `i` / `n`: 表示 `integer` (整型) * `int iAge = 25;` (一个整型变量,存储年龄) * `int nCount = 10;` (一个整型变量,存储计数) * `f`: 表示 `float` (单精度浮点型) * `float fPrice = 19.99;` (一个浮点变量,存储价格) * `float fTemperature = 36.5;` (一个浮点变量,存储温度) * `d`: 表示 `double` (双精度浮点型) - 有时也用 `db` * `double dPi = 3.1415926535;` * `c`: 表示 `char` (字符型) * `char cKeyPress;` (一个字符变量,存储按键) * `b`: 表示 `boolean` (布尔型) / `bool` (在支持`bool`类型的语言中) * `BOOL bIsValid = TRUE;` (一个布尔变量,标识是否有效) * `bool bFileOpen = false;` * `sz`: 表示 `string terminated by zero` (以零结尾的字符串 - 常见于C语言) * `char szName[50] = "John Doe";` (一个字符数组/字符串,存储名字) * `str`: 表示 `string` (字符串 - 在更现代或面向对象的语言中常用) * `CString strUserName;` (一个字符串对象,存储用户名) * `p`: 表示 `pointer` (指针) * `int* piNumber = &iAge;` (一个指向整数的指针) * `HWND hWndMain;` (一个窗口句柄,本质上也是一个指针类型) * `arr` / `a`: 表示 `array` (数组) * `int arrScores[10];` (一个整数数组,存储分数) * `float[] aTemperatures;` (一个浮点数数组 - 语法根据语言) 2. **作用域/含义前缀(App / Systems Hungarian):** 表示变量的**作用域、用途或语义含义**(这部分争议更大,使用也更不一致)。 * `m_`: 表示成员变量(`member variable`) * `private int m_iCounter;` (类的私有成员变量,整型计数器) * `g_`: 表示全局变量(`global variable`) * `extern int g_nTotalInstances;` (全局整型变量,存储实例总数) * `s_`: 表示静态变量(`static variable`) * `static int s_nObjectsCreated = 0;` (静态整型变量,记录创建的对象数) * `h`: 表示句柄(`handle`)- 常与类型前缀结合 * `HANDLE hFile;` (文件句柄) * `w`, `l`: 表示 `WORD` (16位无符号整数), `LONG` (32位有符号整数) - 特定于Windows API * `WORD wParam;` * `LONG lResult;` * `u`: 表示无符号(`unsigned`) - 常与类型前缀结合 * `UINT uFlags;` (无符号整型,存储标志位) * `b` / `is` / `has`: 表示布尔值(`boolean`) - 侧重于语义 * `BOOL bEnabled;` (是否启用) * `bool isVisible;` (是否可见) * `bool hasChildren;` (是否有子项) **混合使用示例:** ```c // C/C++ 示例 int g_iGlobalCounter = 0; // 全局 (g_), 整型 (i) struct Student { char m_szName[50]; // 成员 (m_), 以零结尾的字符串 (sz) int m_iAge; // 成员 (m_), 整型 (i) float m_fGPA; // 成员 (m_), 浮点 (f) }; void ProcessData(int nInput, float* pfOutput) { // 整型入参 (n), 指向浮点的指针输出参数 (pf) BOOL bSuccess = FALSE; // 布尔值 (b) char cFirstChar; // 字符 (c) HANDLE hFile; // 句柄 (h) static int s_nCallCount = 0; // 静态 (s_), 整型 (n) // ... 函数逻辑 ... } ``` ```java // Java 示例 (匈牙利法在现代Java中极少使用,此处仅为演示理解) public class MyClass { private int m_iCount; // 成员变量 (m_), 整型 (i) - 不符合主流Java风格! private String m_strName; // 成员变量 (m_), 字符串 (str) - 不符合主流Java风格! public void calculate(float fValue) { // 浮点参数 (f) boolean bIsReady = false; // 布尔局部变量 (b) // ... 方法逻辑 ... } } ``` **关键点总结:** 1. **前缀是附加信息:** 前缀不是变量名的主体,主体部分仍然应该是描述性的英文单词(常用驼峰命名法 `camelCase` 或帕斯卡命名法 `PascalCase` 命名主体部分)。 2. **目标:可读性:** 目的是让程序员(尤其是后来维护代码的人)快速识别变量的基本类型或关键属性,无需查找声明。 3. **现代趋势:** 在强类型、拥有良好IDE(支持代码提示、悬停查看类型)的现代编程语言(如C#, Java, Python, TypeScript)中,**基础数据类型前缀(如`i, f, sz`) 已基本被视为过时或不推荐使用**。主要原因有: * IDE的强大功能使得类型信息唾手可得。 * 类型系统本身足够清晰。 * 代码重构(如修改变量类型)需要同步修改所有前缀,容易出错且繁琐。 * 可读性争议:有人认为前缀增加了视觉噪音。 4. **残留使用:** 一些特定场景或遗留代码中仍有可见踪迹: * 成员变量前缀(`m_`)在某些团队或框架中仍有使用。 * 布尔值语义前缀(`is`, `has`, `can`)是广泛接受的良好实践。 * UI控件命名(`btnSubmit`, `txtUserName`, `lblStatus`)本质上是变相的匈牙利命名法(表示控件类型)。 * 底层系统编程(如Windows API)或特定领域库中仍大量存在。 **简而言之:匈牙利命名法通过像`iCount`(整型计数器)、`szName`(字符串名字)、`m_bVisible`(成员布尔值是否可见)这样的命名方式,在变量名中编码了类型或作用域信息。虽然其严格的类型前缀在现代开发中已式微,但其追求代码清晰可读的核心思想以及语义前缀(如`is`, `has`, `m_`)仍在实践中广泛应用。** [^1][^2][^3][^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值