代码要写注释吗?写你就输了

75 篇文章 13 订阅
订阅专栏

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 HelloWorld杰少 即可关注。

如何看待程序员不写注释?

“几个月前,我写的代码只有我和上帝知道”

“现在,只有上帝知道了”

最近在知乎上看到了这个话题:怎样看待程序员不写注释? 看了下浏览量居然有 30+w 次,看来大家讨论的挺热闹,我浏览了大部分的回答,发现大家的观点可以归纳为以下几点:

  1. 不写注释就是害人害己,别人看不懂,过几天连自己也看不懂
  2. 好的代码就是最好的注释,我的代码可读性很好,没必要写注释
  3. 只要有完善的文档,代码本身就是注释
  4. 自己写代码时:“我自己写的代码还要写注释?” 看别人的代码时:“卧槽这人居然不写注释?”

对于程序员群体,有位知乎网友的总结非常到位:程序员最讨厌的四件事:1. 写注释 2. 别人不写注释 3. 写文档 4. 别人不写文档,不得不说我们程序员群体真是个可爱而又敢于自黑的群体。

image

说实话,我第一次看到这个话题的时候,我愣了一下,心想谁会提出这么沙雕的问题,在我看来写代码不写注释,那不就跟耍流氓一样嚒!在我第一天开始写代码的时候,我的老师就告诉我注释的重要性,就好比渴了要喝水,饿了要吃饭一样,这是编码的习惯。

image

我们写代码不仅仅是只给编译器看,还要给自己身边的同事看,假如有一天休假,你把工作交接给了你的同事社会王,你正吃着火锅唱着歌呢,社会王因为帮你解决 Bug 而又看不懂你的代码,给你来个夺命连环 Call,你还有什么心思度假。有人也会说:“我自己写的代码只要我自己看的懂就行”,可事实上不写注释,时间一久,等需要重新拾起来的时候你就会发现:“卧槽,这是啥?这为啥报错”。所以给代码添加合格的注释不仅能够让别人更快速的接手你的代码,也能更快的让拾起自己的代码。

image

迷惑行为

在正式的给大家讲解如何写出合格的注释之前,先给大家看下各种脑洞大开的代码注释:

斗图型

image

image

image

image

吐槽型

image

image

image

image

炫耀型

这是学生时期的谢尔盖·布林,后来 Google 的联合创始人之一,这位小伙子当时“低调”地把自己的待遇需求写在了注释里。翻译成中文大概意思就是“钱多事少大办公室,经常免费去好玩的地方旅行,好耶!

image

雷军 23 年前写的代码
image

/* * You may think you know what the following code does. * But you dont. Trust me. * Fiddle with it, and youll spend many a sleepless * night cursing the moment you thought youd be clever * enough to "optimize" the code below. * Now close this file and go play with something else. */

中文:你可能相信你能看懂以下代码,但是其实绝对不可能,相信我。一旦你调试了,你绝对会后悔装聪明去尝试优化这段代码。最好的方式是关闭文件,去玩点儿你喜欢的东西吧

菜鸡型
// I am not sure if we need this, but too scared to delete. ... ...

中文:个人不确认是不是需要,但是实在不敢删除

// I am not responsible of this code. // They made me write it, against my will.

中文:个人不负责这块的质量,因为他们逼迫我违心的写了这段代码

//This code sucks, you know it and I know it. //Move on and call me an idiot later.

中文:这段代码的确很挫,我知道你也知道,先不要骂我蠢,请先接着往下看.

看到上面这些灵魂极其有趣的程序员们各种脑洞大开,整起了各种类型的花活,我就只想问你们一下,你们的经理是不是不 review 你们的代码?

image

如何优雅的为程序写注释?

“好的代码不需要注释”不等于“没有注释就是好的代码”,好的代码不需要注释的前提是后面阅读你代码的人水平不能比你差太多,要写出那种新人都能看懂的代码,实在是太难了。

image

说到这里想必大家也知道了注释的重要性,注释可以帮助开发者在没有阅读代码的情况下快速了解该接口的功能和用法,如果注释写的好,你的代码也就更受人欢迎。

既然注释有这么多好处,那还不来学习一下一名合格的程序员该如何写注释。

以下注释遵循 C++ 和 Swift 规范, 注释选自开源项目:Kingfisher 和 Alamofire

利用好注释模板

注释模板为注释写作提供了极大的便利,我们常用的开发工具如 VS Code,Xcode 都对注释模板有很好的支持;例如 Xcode, 只要在需要注释的代码的上一行按下快捷键:opt + cmd + / 就可以添加注释模板。

示例如下:

image

注释风格

// 或者 /// 或 /* */ 都可以; 但 // 更 常用, 要在如何注释及注释风格上确保统一。

文件注释

文件注释描述了该文件的内容,每个文件注释都要包含以下内容:文件内容的简要描述,作者信息,日期,版权信息声明

文件注释的顺序应该如下:

  1. 文件内容的简要描述
  2. 作者信息
  3. 日期
  4. 版权信息声明,例如:Copyright 2008 Google Inc。 必要的话还可以加上许可证样板,例如:Apache 2.0, BSD, LGPL, GPL

示例如下:

//
//  Kingfisher.swift
//  Kingfisher
//
//  Created by Wei Wang on 16/9/14.
//
//  Copyright (c) 2019 Wei Wang <onevcat@gmail.com>
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.
类注释

类注释应该要为读者提供使用该类的足够信息, 同时应当提醒读者在使用此类时要注意的事项。

示例如下:

import Foundation

/// `Session` creates and manages Alamofire's `Request` types during their lifetimes. It also provides common
/// functionality for all `Request`s, including queuing, interception, trust management, redirect handling, and response
/// cache handling.
open class Session {
	
	...

}
函数注释

我们要在每个函数的声明处前加上注释, 描述该函数的功能和用途. 只有在函数的功能通俗易懂时才可以省略这些注释 (例如, 简单的取值和设值函数).。

示例如下:

/// Creates a `DataRequest` from a `URLRequest` created using the passed components and a `RequestInterceptor`.
    ///
    /// - Parameters:
    ///   - convertible:     `URLConvertible` value to be used as the `URLRequest`'s `URL`.
    ///   - method:          `HTTPMethod` for the `URLRequest`. `.get` by default.
    ///   - parameters:      `Parameters` (a.k.a. `[String: Any]`) value to be encoded into the `URLRequest`. `nil` by
    ///                      default.
    ///   - encoding:        `ParameterEncoding` to be used to encode the `parameters` value into the `URLRequest`.
    ///                      `URLEncoding.default` by default.
    ///   - headers:         `HTTPHeaders` value to be added to the `URLRequest`. `nil` by default.
    ///   - interceptor:     `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default.
    ///   - requestModifier: `RequestModifier` which will be applied to the `URLRequest` created from the provided
    ///                      parameters. `nil` by default.
    ///
    /// - Returns:       The created `DataRequest`.
    open func request(_ convertible: URLConvertible,
                      method: HTTPMethod = .get,
                      parameters: Parameters? = nil,
                      encoding: ParameterEncoding = URLEncoding.default,
                      headers: HTTPHeaders? = nil,
                      interceptor: RequestInterceptor? = nil,
                      requestModifier: RequestModifier? = nil) -> DataRequest {
        let convertible = RequestConvertible(url: convertible,
                                             method: method,
                                             parameters: parameters,
                                             encoding: encoding,
                                             headers: headers,
                                             requestModifier: requestModifier)

        return request(convertible, interceptor: interceptor)
    }
变量注释

通常我们取变量名称的时候已经将其意义说明了。但是在逻辑复杂的情况下, 还是需要添加一些注释说明来做特别说明。

示例如下:

/// Underlying `URLSession` used to create `URLSessionTasks` for this instance, and for which this instance's
    /// `delegate` handles `URLSessionDelegate` callbacks.
    ///
    /// - Note: This instance should **NOT** be used to interact with the underlying `URLSessionTask`s. Doing so will
    ///         break internal Alamofire logic that tracks those tasks.
    ///
    public let session: URLSession
TODO 注释

对那些临时的, 短期的解决方案, 使用 TODO 注释。

示例如下:

// TODO(kl@gmail.com): Use a "*" here for concatenation operator.
// TODO(Zeke) change this to use relations.
// TODO(bug 12345): remove the "Last visitors" feature
弃用注释

通过注释(DEPRECATED comments)来标记接口已弃用,并要说明后续的替代方案。

示例如下:

/// Gets an image deserialized from provided data.
    ///
    /// - Parameters:
    ///   - data: The data from which an image should be deserialized.
    ///   - options: Options for deserialization.
    /// - Returns: An image deserialized or `nil` when no valid image
    ///            could be deserialized.
    /// - Note:
    /// This method is deprecated. Please implement the version with
    /// `KingfisherParsedOptionsInfo` as parameter instead.
    @available(*, deprecated,
    message: "Deprecated. Implement the method with same name but with `KingfisherParsedOptionsInfo` instead.")
    func image(with data: Data, options: KingfisherOptionsInfo?) -> KFCrossPlatformImage?

最后

注释虽然写起来很痛苦, 但对保证代码可读性至关重要。 总而言之,学会写好代码注释,是每一个程序员的必备技术,也是一种良好的编程习惯,不仅仅是为了开发团队中的小伙伴,也是为了面对将来的自己。

参考资料:

  1. https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/comments/
  2. https://bbs.huaweicloud.com/blogs/176194
  3. https://github.com/onevcat/Kingfisher
  4. https://github.com/Alamofire/Alamofire
  5. https://www.zhihu.com/question/27246926/answer/1214585389

相关阅读:

Codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿

iOS 优雅的处理网络数据,你真的会吗?不如看看这篇

UICollectionView 自定义布局!看这篇就够了

Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

UICollectionView 自定义布局实现瀑布流视图

使用 UICollectionView 实现分页滑动效果

使用 UICollectionView 实现首页卡片轮播效果

请你喝杯 ☕️ 点赞 + 关注哦~

  1. 阅读完记得给我点个赞哦,有👍 有动力

  2. 关注公众号— HelloWorld杰少,第一时间推送新姿势

基于GB28181的RTP封包PS封包源代码(包含详细注释).zip
08-25
这个源代码应该包含了以上所有步骤的实现,并且有详细注释,对于理解GB28181标准下的RTP和PS封装流程非常有帮助。开发者可以通过阅读源代码,了解如何在实际项目中实现GB28181标准的音视频传功能,这对于视频监控...
8.3-代码必须要注释吗?(为什么现实中不写注释?)
Robert Zhang
07-19 4294
一、代码注释代码注释”自从学编程,这就话就伴随着你。可见注释的重要性。 注释的作用: 说明函数的功能 说明函数参数的意思 说明函数这样设计的原理(计算公式) 说明函数的使用场景 作者和日期 说明变量的作用 函数调用方法与注意事项 总之为了能让读这个函数的人明白这个函数的功能,可以注释各种各样的信息。而没有这些注释文字,就不太容易看懂函数的功能与调用用方法。没有注释的情况下,隔一段时间之后,自己也看懂的自己所函数的功能了。因此,很多书籍、老师、领导、同事、包括你自己,都会告诉你“一定要
程序员因不写注释被同事联合“关爱”!编程不规范,同事两行泪
致力于C语言C++知识分享!
01-10 758
编程江湖中一直盛传着一个段子,那就是要问程序员最讨厌哪 4 件事?那必须是: 注释文档、别人不写注释、别人不写文档。 当你让程序员一个项目,或者和同事共同完成一个项目的时候,如果你不做好注释的话,那么你可能会受到整个团队程序员的集体关爱。因为每个程序员的基础不一样,而且入门的编程语言也不一样,但是大多数语言都遵循相同的思想。所以,他们也会出现相同的问题。 编程不规范,同事两行泪!为了...
程序员不写注释的原因及解决方案
啊渊的专栏
10-11 449
在软件开发领域,注释的重要性不言而喻。然而,我们常常发现许多程序员在编代码时并不喜欢添加注释。我们一起来分析程序员不写注释的原因,并提出相应的解决措施。作为开发者,我们应该养成良好的编程习惯,不仅要关注代码的实现,还要注重代码的可读性和可维护性。在编代码时,适当添加注释有助于我们理清思路、降低出错概率,同时便于团队成员理解代码逻辑,提高协作效率。我们分析了程序员不写注释的原因,并提出了相应的解决措施。通过强制要求添加注释、建立注释模板和加强沟通,我们可以提高代码的可读性,降低沟通成本,提高开发效率。
关于程序员不写代码注释这一件事
沐雨橙风ιε的博客
10-12 292
4、和代码不同的是,代码注释本身并没有统一的规范,所以,其实完全可以根据自己的喜好来,甚至可以在service层的impl实现类的方法上面加上整个业务的核心步骤并编号,然后在代码中也复一次,类似于书的目录。3、漂亮的注释要配合适当的代码缩进才能达到更好的效果,如果所有代码之前都没有空格和换行,那么你的代码整体会非常乱,哪怕注释也一样。博主个人代码是肯定会注释的,哪怕是简单的功能,文档注释、多行注释、单行注释怎么顺手怎么用,让一个小白也能看懂自己的代码。2、平时没有养成代码注释的习惯。
优秀的程序员真的不写注释吗?
热门推荐
沉默王二
05-11 4万+
我在很多地方看到这样一个观点,“请停止注释,因为只有烂的代码才需要注释。”这个观点非常巧妙,它让我想起了孟子的一句话,“杨氏为我,是无君也;墨氏兼爱,是无父也。无父无君,是禽兽也。” 动不动就骂别人是“禽兽”,我总觉得有点不妥,这很不符合孟子的浩然之气啊。有些大牛也有孟子这样的觉悟,如果有人要他给自己的代码加上注释,就好像是对他的一种侮辱:“我的代码得这么优雅,你难道看不懂吗?注释是多余的!” 我必须得承认,每个程序员都应该有一颗追求“优雅”的心,力争自己的代码更易阅读和理解——不只是针对机器,还有我
程序员爱不写注释的智慧
kunlong-luo的博客
10-12 337
博主做为一位经验丰富的程序员,阅览过精心设计如诗如画般优雅的代码,也碰到过如垃圾堆叠混乱不堪的屎山代码。两者各有优劣,请听我娓娓道来。
方法前快速注释代码
09-14
xcode中实现如///在方法前快速出现方法注解的模板的代码包,如果想了解具体如何实现,请参考http://blog.sina.com.cn/s/blog_161d504630102wtc9.html
c代码-2-1例(半径求面积)
07-16
在本项目中,"c代码-2-1例(半径求面积)"是一个简单的C语言编程示例,旨在教授如何通过用户入的圆的半径计算其面积。这个程序的基本逻辑是利用数学公式来求解圆形的面积,公式为:面积 = π * 半径²。这里π...
电机位置闭环控制(代码详细注释).zip
08-03
总结来说,"电机位置闭环控制(代码详细注释).zip"文件提供的内容涵盖了电机控制的核心技术,包括PID算法的运用、编码器的信号处理、定时器的配置以及联动控制的实现。通过理解和应用这些知识点,开发者可以构建出...
C/C++源程序注释的删除
04-28
C语言注释删除程序 [程序功能] 1、删除注释,包括块注释(/**/)和行注释(//) 2、删除空白行 3、用指定数量的空格替换TAB字符 [使用方法] 1、在WINDOWS的CMD窗口中键入行命令 2、使用WINDOWS的批处理文件(.BAT...
代码的时候一定要注释吗?
最新发布
Twinkle_sone的博客
06-18 404
🎈程序员最讨厌两件事: 一是别人不写注释 二是要自己注释
代码不写注释,你是在耍流氓吗?
fasdfasfwerwqf的博客
11-02 240
作为一个程序员,你是否经常遇到这样的情况:当你看到别人代码时,你感觉像是在破译一个古老的密码,完全不知道它是做什么的,为什么要这样,有什么特殊的考虑或注意事项;当你回顾自己代码时,你感觉像是在重温一个噩梦,完全不记得它是怎么运行的,为什么要这样设计,有什么优缺点或改进空间。注释是程序员之间沟通和交流的重要工具,是代码质量和效率的保证。综上所述,注释是程序员的基本素养和职业责任,是编程的必要和重要的一部分。所以,请你在代码时,不要忘记注释,给自己和他人一个方便和快乐。那么,如何注释呢?
为什么有人代码不写注释
整理ing
10-13 161
注释是一种习惯,有些时候是一个程序员基本素养,甚至是职业道德体现。但是有些人就是不写,跟人、开发经验、性格等很多因素有关。上班八年不写注释上班10年注释
码农的自我修养——对代码注释的理解(转)
GeoBase的博客
05-31 749
如何代码注释是一个老话题,可以说一千个程序员就有一千种不同的理解。 下面是从我自己工作中所看到的,所听到的,结合自己编码的体会谈一下自己的想法。 对代码注释的态度大致有三种误区: 注释很重要,每一行代码都要注释注释可有可无,为了应付公司的编程规范,QA 的审查,开始拷贝一些函数头注释,拷过去什么都不改,连原作者名都不改,只为满足代码注释率的要求 无需注释代码注释。 第一种 新员工热情很高,也很有责任心,导师或者项目经理说要把注释清楚啊。于是乎我们就屁颠屁颠的每个变量,每个分支,每行代码都加上
不写注释,码农枪击4位同事,一人情况危急
IT界那些事儿
12-13 9931
现在看来码农打架已经算温柔的了,今天来自美国的一名程序员因同事不写注释,不遵循驼峰命名,括号换行,最主要还天天 git push -f 等因素枪击了 4 名同事,导致一人情况危急。据可靠消息称,这名程序员在威斯康星州米德尔顿的这家公司工作了一年多。这件事在国外引起了广泛的讨论,有人猜测说可能是:“同事不写注释,不遵循驼峰命名,括号换行,最主要还天天 git push -f 等因素”激怒了这名行凶者。事后,有部分同时透露,当时自己正伏案工作,突然听到枪响,就赶紧跑出大楼,躲在一辆汽车后面。
代码注释如此沙雕,会玩还是你们程序员!
九章算法的博客
04-24 390
某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路...... 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都满了对产品经理的恨。 然后,也...
究竟要不要代码注释
weixin_30617797的博客
01-13 271
看完上图你是什么反应?会骂人吗?会就对了……,代码整洁之道,是一条很漫长的路,注释是其中一部分。 如果是一个很大的方法,要不要加注释?一个大方法按照它的功能被分割成几个小方法,这样代码就比较容易阅读了,但有的童鞋说能在项目的deadline里面搞出来就行了,哪有时间整理这种大方法?为了让你的搭档或者接手者,更轻松的理解,让她/他少加班,抽时间还是整理一下吧。按照树的结构,一个主干,其他分支都...
代码规范
追随内心
05-19 281
普通的工程师堆砌代码,优秀的工程师优雅代码,卓越的工程师简化代码。如何出优雅整洁易懂的代码是一门学问,也是软件工程实践里重要的一环。笔者推荐三本经典的书籍《代码整洁之道》、《编可读代码的艺术》、《重构:改善既有代码的设计》,下文重点将从注释、命名、方法、异常、单元测试等多个方面总结了一些代码整洁最佳实践,大部分是笔者总结于以上三本书中的精华,也有部分是笔者工程实践的总结。篇幅有限,本文将总结性给出一些实践建议,后续会有文章来给出一些代码整洁之道的事例。 一、注释 不要给不好的名字加注释,一个好的名字.
用Java一个简单猜拳小游戏,代码注释
03-03
很高兴能回答你的问题。这里有一段示例代码,你可以参考:/* 猜拳小游戏 */ import java.util.Scanner; public class GuessingGame { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int player, computer; System.out.println("请出拳:1.剪刀 2.石头 3.布"); player = sc.nextInt(); computer = (int) (Math.random() * 3 + 1); switch (player) { case 1: if (computer == 1) System.out.println("你出的是剪刀,电脑出的也是剪刀,平局!"); else if (computer == 2) System.out.println("你出的是剪刀,电脑出的是石头,你了!"); else System.out.println("你出的是剪刀,电脑出的是布,你赢了!"); break; case 2: if (computer == 1) System.out.println("你出的是石头,电脑出的是剪刀,你赢了!"); else if (computer == 2) System.out.println("你出的是石头,电脑出的也是石头,平局!"); else System.out.println("你出的是石头,电脑出的是布,你了!"); break; case 3: if (computer == 1) System.out.println("你出的是布,电脑出的是剪刀,你了!"); else if (computer == 2) System.out.println("你出的是布,电脑出的是石头,你赢了!"); else System.out.println("你出的是布,电脑出的也是布,平局!"); break; } } }
写文章

热门文章

  • iOS 开发之实现 App 消息推送(最新) 219647
  • iOS 开发之 In-App Purchase 对接教程 (一) 135136
  • 实现基于 TCP/IP 协议简单的客户端、服务器通信程序实例 108989
  • 苹果设备3.5英寸,4英寸,4.7英寸,5.5英寸屏幕像素指南 52559
  • 一文带你知晓如何在 GitHub 上发现优秀的开源项目 51779

分类专栏

  • UE4 开发 4篇
  • iOS 开发实战 75篇
  • 设计模式 1篇
  • 开发工具 2篇
  • 关于AppStore的那些事 5篇

最新评论

  • 使用 UICollectionView 实现分页滑动效果

    cs_df: 滚动没问题,试了下 如果点击滚动会展示不对

  • UE4 开发之实现按钮事件响应

    Alpha_Lega: 这很难评,所以怎么自定义或者使用api实现控件与事件的绑定?

  • iOS 开发仿网易云音乐歌词海报

    daming1995: 现在网易云不行了,好多正版歌没了

  • UE4 开发之如何创建 iOS 平台插件

    牧仁哥哥: 你好杰少,自建的framework静态库中界面使用到图片,但是加入到UE能展示控件,但图片没有加载到。请问静态库中的图片获取你是怎么写的?

  • iOS开发之文件操作(一个简单的文件操作类)

    Alexw.Wang: 创建文件如果路径不存在就不创建了?

最新文章

  • Codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿
  • iOS 优雅的处理网络数据,你真的会吗?不如看看这篇.
  • UICollectionView 自定义布局!看这篇就够了
2021年10篇
2020年11篇
2018年3篇
2017年14篇
2016年17篇
2015年8篇
2014年16篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HelloWord杰少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳坪山网站建设公司网站SEO优化代运营托管大安网站优化鄱阳seo网站优化网站落地页优化方法邹平网站优化方案佛山合同优化法律咨询网站网站排名优化软件异常易速达贵阳如何优化网站排名亳州网站搜索排名优化哪家正规喀什网站优化排名如皋网站优化有用吗如何判断影响网站不利优化因素网站seo优化的最难点在哪里新邵县网站seo优化排名四川网站优化网站优化有什么忌讳手机端网站如何优化百度经验漳州优化网站官网网站优化东城网站首页优化南京如何优化推广网站天津网站优化排名公司销售类网站如何优化重庆网站优化合肥seo网站优化方案网站优化网络优化网站配色搭配网站性能优化 架构seo网站关键词优化手机南平网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化