加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.beijidao.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

无障碍编程:变量命名如何无声包容视障开发者

发布时间:2026-10-14 15:05:35 所属栏目:语言 来源:DaWei
导读:  2025年7月,我们那个所谓“无障碍友好版”的管理后台上线第三天,测试组老周拿读屏软件扫到权限树组件,卡在第三个节点——不是逻辑崩了,是变量名叫 isVis。他念出来:“I-S-V-I-S”,停了三秒,问我,“这到底是‘is visible’

  2025年7月,我们那个所谓“无障碍友好版”的管理后台上线第三天,测试组老周拿读屏软件扫到权限树组件,卡在第三个节点——不是逻辑崩了,是变量名叫 isVis。他念出来:“I-S-V-I-S”,停了三秒,问我,“这到底是‘is visible’还是‘is vision’?还是‘is visitor’?”我盯着自己写的那行 const isVis = useMemo(() => props.role === 'admin', [props.role]),手悬在机械键盘上没按下去。Caps Lock 灯亮着,左下角那个 Shift 键早就不回弹了,按下去像陷进橡皮泥里。


  改版上线翻车。这事儿真不怪读屏引擎——NVDA 2025.2 和 VoiceOver 18.3 都能准确播报“i-s-v-i-s”,问题出在人耳听辨的模糊带宽上。你写 isVisible,它念“is-visible”,停顿清晰;写 isVis,它念成“is-vis”,跟“is-viz”“is-viss”“is-visceral”全在一个声调褶皱里糊着。我原以为缩写只要符合团队约定就行,结果老周用JAWS录了段音频发群里:前五秒是键盘敲击声,第六秒突然压低嗓音说“is-vis…还是is-vision…?”,第七秒静音两秒半,第八秒他叹了口气,汤勺磕在不锈钢杯沿上“叮”一声。旁边工位小陈去茶水间倒水,路过时顺手把我的双屏壁纸换成了《星际穿越》土星环截图——左边屏是冰晶结构放大图,右边屏是环缝阴影投射模型,俩图色温差两百开尔文,刺眼得我眯了三次眼。


  Chrome DevTools 切在 “Elements” tab 里,但焦点其实卡在 Console 里一条没清掉的 console.warn('Deprecated: use new permission model')。这条警告是我上周五下班前删一半忘提交的。后端老马隔着三排工位吼了一句:“张工,你那个 userPriv 接口字段是不是又改命名了?”我没应,因为刚发现 userPriv 在 PR 里被我注释掉了,但前端 SDK 里还残留着同名类型定义,TypeScript 没报错——它只校验声明,不校验是否被引用。这个我敢打包票,昨天下午四点十七分我亲手试过,删掉 userPriv 定义后 tsc —noEmit 依然通过。


  再说回 isVis。我们团队命名守则白纸黑字写着“可读性优先”,但没人规定“可听性”。读屏不是朗读,是语音流解码——每个音节都承担歧义风险。你写 isLoading,没问题;写 loadStat,用户得靠上下文猜是 state 还是 status 还是 static;写 loadSt?直接放弃。CSS 命名我也烦这事。上个月跟PM吵,他说“btn-primary-sm”语义明确,我说那“btn-pri-sm”呢?他愣住,说“没人这么写”。我笑了:没人写,是因为人眼能自动补全,耳朵不会。


文章配图,仅供参考

  外卖盒盖没扣严,鸡汤在桌角洇开一小片琥珀色油渍,正好盖住我贴在显示器边框的便签纸,上面潦草记着三个待改变量:canEditFlag、selItems、hasPermX。其中 selItems 是今天凌晨紧急热更加进去的,用来兼容旧数据格式。结果 QA 小杨用 NVDA 测,把 selItems 听成 “sell-items”,顺手在 buglist 里写了句:“购物车逻辑泄漏到权限模块?”。我删了两遍 Git blame 才确认这不是后端埋的坑——就是我,凌晨两点零七分,在咖啡因和 deadline 的夹击下,把 selectedItems 缩成四个音节,亲手造了语义黑洞。


  优胜劣汰——就这四个字,不是褒义词,是裸奔现场。你变量名含糊,读屏软件不会跪下求你重写,它只管播;用户也不会投诉“听不清”,他只会默默切回旧版,或找别人代操作。我们上次做无障碍审计,盲测样本量十二人,七人绕过权限页直接找客服走人工通道。没人说系统烂,只说“不太顺手”。这个我说不准,是听障还是操作习惯问题,但我知道,他们第二次打开时,浏览器缓存里的 JS 文件根本没变,变的是信任阈值——低于某个值,连重试都懒得点。


  我今早改了十五个变量:全展开,全小驼峰,全避开了 vis/perm/flag/st 之类高危后缀。PR 提交后,CI 跑完 lint 报了一条 warning:'isAdmin' is defined but never used——哦对,我把旧变量 isAdmin 注释了,但忘了删。现在它躺在 utils.ts 第四百三十二行,像一颗没拆引信的哑弹。要不要删?我不知道。可能下周又被哪个脚本临时拉出来用,也可能永远沉底。先这么放着吧。反正读屏软件读不到注释。


  对了,我键盘右下角那个 Delete 键,膜裂了,按下去有沙沙声。刚才小陈倒完水回来,把双屏壁纸又换回去了——左边是未压缩的 .webp 原图,右边是同等尺寸的 .avif。两个文件大小差三百七十二个节点,但肉眼看不出区别。这种事,谁在乎呢。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!