Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】

JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】

作者头像
HelloWorldZ
发布于 2024-03-22 07:32:36
发布于 2024-03-22 07:32:36
20600
代码可运行
举报
文章被收录于专栏:前端开发前端开发
运行总次数:0
代码可运行

前言

嘟三~ 嘟三~ 今日份广播题目:“怎么让JavaScript越来越6”。接下来,小菜鸡本人将和大家一起来探讨ES6-ES13的那些酷酷的新特性,从这次广播开始,你也可以炫耀:“这个ES新特性我都用得溜溜的!”

引子

ES6版本邀请了新的舞伴加入:Symbol、Set和Map,这三位舞伴各具特色,各自承担着不同的角色,使得JavaScript这个舞变得更加精彩。

一、Symbol

1.1. Symbol的基本使用

Symbol是什么呢?Symbol是ES6中新增的一个基本数据类型,翻译为符号。

那么为什么需要Symbol呢?

  • 在ES6之前,对象的属性名都是字符串形式,那么很容易造成属性名的冲突
  • 比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性
  • 比如我们前面在讲apply、call、bind实现时,我们有给其中添加一个fn属性,那么如果它内部原来已经有了fn属性了呢?
  • 比如开发中我们使用混入【Mixin】,那么混入中出现了同名的属性,必然有一个会被覆盖掉

Symbol就是为了解决上面的问题,用来生成一个独一无二的值。

  • Symbol值是通过Symbol函数来生成的,生成后可以作为属性名
  • 也就是在ES6中,对象的属性名可以使用字符串,也可以使用Symbol
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s = Symbol()
console.log(s) // Symbol()

你无论怎么召唤他,他每次都会以一个全新的面孔出现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s1 = Symbol()
const s2 = Symbol()

console.log(s1 === s2) // false

我们也可以在创建Symbol值的时候传入一个描述description【这个是ES2019(ES10)新增的特性】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s3 = Symbol("abc")
console.log(s3.description)

1.2. Symbol作为属性名

Symbol的独特性使得他成为了一个好帮手。当你需要一个完全不会冲突的属性名时,你可以找到Symbol

写法一: 属性名赋值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s1 = Symbol("abc")
const s2 = Symbol("cba")
const obj = {}
obj[s1] = "abc"
obj[s2] = "cba"
写法二: Object.defineProperty
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s1 = Symbol("abc")
const s2 = Symbol("cba")
const obj = {}
Object.defineProperty(obj, s1, {
  enumerable: true,
  configurable: true,
  writable: true,
  value: "abc"
})
写法三: 定义字面量是直接使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s1 = Symbol("abc")
const s2 = Symbol("cba")
const obj = {}
const info = {
  [s1]: "abc",
  [s2]: "cba"
}

之后我们可以通过Symbol值来获取值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(info[s1]) // abc
console.log(info[s2]) // cba
// 不能这样获取
console.log(info.s1) // undefined

但是通过Symbol添加的属性名,在遍历时,是无法获取到的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(Object.keys(info))
console.log(Object.getOwnPropertyNames(info))

如果我们希望获取Symbol的key,那么需要通过 Object.getOwnPropertyNames:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(Object.getOwnPropertySymbols(info))
const symbolKeys = Object.getOwnPropertySymbols(info)
for (const key of symbolKeys) {
  console.log(info[key])
}
1.3. 相同值的Symbol

Symbol精灵的独特并不意味着他不能分享他的秘密。当你使用Symbol.for()召唤他的时候,他会首先翻阅他的记事本,看看你是不是之前就已经拜访过他,如果是的话,他就会带着他上次的面孔再次出现。

  • 我们可以使用Symbol.for方法来做到这一点
  • 并且我们可以通过Symbol.keyFor方法来获取对应的key
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const s1 = Symbol.for("abc")
const s2 = Symbol.for("abc")

console.log(s1 === s2) // true
const key = Symbol.keyFor(s1)
console.log(key) // abc
const s3 = Symbol.for(key)
console.log(s2 === s3) // true

二. Set集合

在ES6之前,我们存储数据的结构主要有两种:数组、对象。

在ES6中新增了另外两种数据结构:Set、Map,以及它们的另外形式WeakSet、WeakMap。

2.1. Set的基本使用

Set是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复。你可以将Set想象成一个派对——在这个派对上,每个人都以其独特的个性和风格展现自我,没有人愿意模仿他人或被他人模仿。毕竟,你在派对上穿同样的衣服是多么尴尬的一件事情!

创建Set我们需要通过Set构造函数(暂时没有字面量创建的方式):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const set1 = new Set()
set1.add(10)
set1.add(14)
set1.add(16)
console.log(set1) // Set(3) { 10, 14, 16 }

const set2 = new Set([11, 15, 18, 11])
console.log(set2) // Set(3) { 11, 15, 18 }

我们可以发现Set中存放的元素是不会重复的,那么Set有一个非常常用的功能就是给数组去重。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const arr = [10, 20, 10, 44, 78, 44]
const set = new Set(arr)
const newArray1 = [...set]
const newArray2 = Array.from(set)
console.log(newArray1, newArray2)
2.2. Set的常见方法

Set常见的属性:

size:返回Set中元素的个数; Set常用的方法: add(value):添加某个元素,返回Set对象本身; delete(value):从set中删除和这个值相等的元素,返回boolean类型; has(value):判断set中是否存在某个元素,返回boolean类型; clear():清空set中所有的元素,没有返回值; forEach(callback, [, thisArg]):通过forEach遍历set;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set.add(100)
set.delete(100)
set.has(100)
set.clear()
set.forEach(item => {
  console.log(item)
})

另外Set是支持for of的遍历的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (const item of set) {
  console.log(item)
}
2.3. WeakSet使用

和Set类似的另外一个数据结构称之为WeakSet,也是内部元素不能重复的数据结构。

那么和Set有什么区别呢?

  • 区别一:WeakSet中只能存放对象类型,不能存放基本数据类型
  • 区别二:WeakSet对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const wset = new WeakSet()

// TypeError: Invalid value used in weak set
wset.add(10)

WeakSet常见的方法:

  • add(value):添加某个元素,返回WeakSet对象本身;
  • delete(value):从WeakSet中删除和这个值相等的元素,返回boolean类型;
  • has(value):判断WeakSet中是否存在某个元素,返回boolean类型;

注意:WeakSet不能遍历

  • 因为WeakSet只是对对象的弱引用,如果我们遍历获取到其中的元素,那么有可能造成对象不能正常的销毁。
  • 所以存储到WeakSet中的对象是没办法获取的;

那么这个东西有什么用呢?

  • 事实上这个问题并不好回答,我们来使用一个Stack Overflow上的答案;

比如我们有一个类Person,里面有一个running方法,我们只希望你通过Person对象来调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person {
  running() {
    console.log("running", this)
  }
}

const p = new Person()
p.running()

p.running.call({name: "why"})

我们可以通过WeakSet来存储创建出来的对象,并且在调用方法时判断这个对象是否存在于WeakSet中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const pwset = new WeakSet()
class Person {
  constructor() {
    pwset.add(this)
  }

  running() {
    if(!pwset.has(this)) throw new Error("不能通过其他对象调用running方法")
    console.log("running", this)
  }
}

const p = new Person()
p.running()

p.running.call({name: "why"})

三. Map映射

3.1. Map的基本使用

另外一个新增的数据结构是Map,用于存储映射关系。

但是我们可能会想,在之前我们可以使用对象来存储映射关系,他们有什么区别呢?

  • 事实上我们对象存储映射关系只能用字符串(ES6新增了Symbol)作为属性名(key)
  • 某些情况下我们可能希望通过其他类型作为key,比如对象,当尝试使用一个对象作为另一个对象的键时,JavaScript会将对象转换为字符串。通常情况下,这种转换会导致对象的类型信息和地址被转换为字符串。例如,[object Object]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const obj = {name: "why"}
const info = {
  [obj]: "kobe"
}
console.log(info) // { '[object Object]': 'kobe' }
const obj2 = {}
console.log(info[obj2]) // kobe

如上,const obj = { name: "why" } 创建了一个对象 obj,然后 const info = { [obj]: "kobe" } 创建了一个新的对象 info,它的键是 [object Object],值是"kobe"。而 const obj2 = {} 创建了另一个空对象 obj2,所以 info[obj2] 实际上是 info["[object Object]"],所以会打印出 kobe

所以这显然不是我们想要的效果,那么我们就可以使用Map:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const obj1 = { name: "why" }
const obj2 = { age: 18 }

const map = new Map()
map.set(obj1, "abc")
map.set(obj2, "cba")
console.log(map.get(obj1))
console.log(map.get(obj2))

我们也可以在创建Map的时候,传入一个数组结构,数组结构中是一个个键值对的数组类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const map = new Map([
  [obj1, "abc"],
  [obj2, "cba"]
])
console.log(map.get(obj1))
console.log(map.get(obj2))

另外Map的key值也是不可以重复的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const map = new Map([
  [obj1, "abc"],
  [obj2, "cba"],
  [obj1, "nba"]
])
console.log(map.get(obj1))
console.log(map.get(obj2))
在这里插入图片描述
在这里插入图片描述
3.2. Map的常见方法

Map常见的属性:

  • size:返回 Map 中元素的个数;

Map常见的方法:

  • set(key, value):在Map中添加 keyvalue,并且返回整个Map对象
  • get(key):根据 key 获取 Map 中的 value
  • has(key):判断是否包括某一个 key,返回 Boolean 类型
  • delete(key):根据 key 删除一个键值对,返回 Boolean 类型
  • clear():清空所有的元素
  • forEach(callback, [, thisArg]):通过 forEach 遍历 Map
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const obj = {}
map.set(obj, "mba")
map.get(obj)
map.has(obj)
// map.delete(obj)
// map.clear()

map.forEach((value, key, map) => {
  console.log(value, key, map)
})
在这里插入图片描述
在这里插入图片描述

Map 也可以通过 for...of 进行遍历:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (const item of map) {
  console.log(item)
}
在这里插入图片描述
在这里插入图片描述

Map 也可以这样来遍历键值对

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let myMap = new Map();
myMap.set('a', 1);
myMap.set('b', 2);

// 遍历键
for (let key of myMap.keys()) {
  console.log(key);
}

// 遍历值
for (let value of myMap.values()) {
  console.log(value);
}

// 遍历键值对
for (let entry of myMap.entries()) {
  console.log(entry[0], entry[1]);
}
3.3. WeakMap使用

和Map类型的另外一个数据结构称之为WeakMap,也是以键值对的形式存在的。

那么和Map有什么区别呢?

  • 区别一:WeakMap的key只能使用对象,不接受其他的类型作为key
  • 区别二:WeakMap的key对对象想的引用是弱引用,如果没有其他引用引用这个对象,那么GC可以回收该对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const weakMap = new WeakMap()
//  Invalid value used as weak map key
weakMap.set(1, "abc")
//  Invalid value used as weak map key
weakMap.set("aaa", "cba")

WeakMap常见的方法有四个:

  • set(key, value):在Map中添加key、value,并且返回整个Map对象;
  • get(key):根据key获取Map中的value;
  • has(key):判断是否包括某一个key,返回Boolean类型;
  • delete(key):根据key删除一个键值对,返回Boolean类型;

注意:WeakMap也是不能遍历的

  • 因为没有forEach方法,也不支持通过for of的方式进行遍历
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// TypeError: weakMap is not iterable
for (const item of weakMap) {
  console.log(item)
}

那么我们的WeakMap有什么作用呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Dep {
  constructor() {
    this.subscribers = new Set();
  }

  depend() {
    if (activeEffect) {
      this.subscribers.add(activeEffect);
    }
  }

  notify() {
    this.subscribers.forEach(effect => {
      effect();
    })
  }
}

let activeEffect = null;
function watchEffect(effect) {
  activeEffect = effect;
  effect();
  activeEffect = null;
}


// Map({key: value}): key是一个字符串
// WeakMap({key(对象): value}): key是一个对象, 弱引用
const targetMap = new WeakMap();
function getDep(target, key) {
  // 1.根据对象(target)取出对应的Map对象
  let depsMap = targetMap.get(target);
  if (!depsMap) {
    depsMap = new Map();
    targetMap.set(target, depsMap);
  }

  // 2.取出具体的dep对象
  let dep = depsMap.get(key);
  if (!dep) {
    dep = new Dep();
    depsMap.set(key, dep);
  }
  return dep;
}


// vue3对raw进行数据劫持
function reactive(raw) {
  return new Proxy(raw, {
    get(target, key) {
      const dep = getDep(target, key);
      dep.depend();
      return target[key];
    },
    set(target, key, newValue) {
      const dep = getDep(target, key);
      target[key] = newValue;
      dep.notify();
    }
  })
}

上面的代码其实是通过WeakMap来收集响应式对象的依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const obj1 = {
  name: "why",
  age: 18
}
const obj2 = {
  address: "北京市"
}

function nameFn1() {
  console.log("nameFn1")
}
function nameFn2() {
  console.log("nameFn2")
}

function ageFn1() {
  console.log("ageFn1")
}

function addressFn1() {
  console.log("addressFn1")
}

const obj1Map = new Map()
obj1Map.set("name", [nameFn1, nameFn2])
obj1Map.set("age", [ageFn1])
weakMap.set(obj1, obj1Map)

const obj2Map = new Map()
obj2Map.set("address", [addressFn1])
weakMap.set(obj2, obj2Map)

四、迭代器

迭代器是ES6引入的新特性,它不仅可以帮助我们访问元素集合中的每一个元素,而且还能记住我们访问的位置。就像图书管理员帮你梳理各种草稿,他不仅可以告诉你每张草稿上的内容,而且在你离开之后还能记住你读到哪一页。

咱们试着创建一本书,让迭代器来辅助咱们来阅读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const book = ['P1: Hello, world!', 'P2: Goodbye, world!']
const iterator = book[Symbol.iterator]()

【解释】

[Symbol.iterator]()是ES6引入的一个特殊的接口(叫做迭代协议)。实现这个接口的对象可以被for...of循环遍历,也可以作为扩展操作符的对象。 在JavaScript中,一些内置类型,如Array, String, Map, Set等默认已经实现了[Symbol.iterator]()方法。 所以book[Symbol.iterator]()就是调用book对象的Symbol.iterator方法,返回一个迭代器。这个迭代器可以用于遍历book中的每一项。

现在最有意思的部分来了。我们的迭代器有一本神奇的魔法书,每当你翻开这本书的时候,他就会指向下一个章节。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(iterator.next()); // {value: "P1: Hello, world!", done: false}
console.log(iterator.next()); // {value: "P2: Goodbye, world!", done: false}
console.log(iterator.next()); // {value: undefined, done: true}

呼,看来我们已经读完了整本书。每次我们请求 next(),迭代器就会告诉我们新的内容,以及我们是否已经看完整本书(通过done属性)。

五、生成器

一个生成器就是一个特殊的函数,它可以在运行中被暂停和恢复,就像是你可以随时开始或停止冰淇淋机一样。在JavaScript中,生成器的定义方式是在函数前加一个星号(*),并且函数体内可以使用yield关键词来暂停函数。

假设我们有一个冰淇淋机器(生成器函数):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function* iceCreamGenerator() {
  yield 'vanilla';
  yield 'chocolate';
  yield 'strawberry';
}

现在,我们创建一个冰淇淋生成器(生成器对象)来制作冰淇淋:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const myIceCream = iceCreamGenerator()

每次你想要一个新口味,你只需请求一次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log(myIceCream.next().value);  // 'vanilla'
console.log(myIceCream.next().value);  // 'chocolate'
console.log(myIceCream.next().value);  // 'strawberry'
console.log(myIceCream.next().done);   // true,哦豁,冰淇淋没有了

从生成器中得到冰淇淋的过程就像是在点冰淇淋一样,你可以随时停下来(通过yield),并在你准备好的时候再继续。最棒的是,当所有口味都用完时,你会收到一个消息,告诉你冰淇淋已经做完了(通过检查返回的对象的done属性)。

小结

参考代码全部来自 CodeWhy 王元红老师 【来源微信公众号 CodeWhy 】,感谢我的引路人王老师。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
飞算JavaAI vs 文心快码,面对复杂需求,谁的代码精准度更胜一筹?
在数字化浪潮汹涌的当下,Java 作为软件开发领域的核心编程语言,为满足开发者日益增长的需求,各类 Java 开发工具不断涌现,其中百度文心快码与飞算 Java AI 凭借先进的人工智能技术,成为开发者关注的焦点。
努力的阿飞
2025/03/10
4560
飞算JavaAI vs 文心快码,面对复杂需求,谁的代码精准度更胜一筹?
“用嘴编程”时代来了,百度Comate将是开发者必备的“新工具”
不确定的开发周期,不断拖延的上线时间,以及不时出现的Bug,俨然成了当下最卷的岗位之一。
Alter聊科技
2024/05/16
2660
百度智能插件Baidu Comate -让你的VSCODE成为代码编写的得力助手
我的是在VSCODE中进行安装的,下面我将演示如何在VSCODE中如何安装,首先在VSCODE的插件商店中去搜索Baidu Comate ,选择第一个蓝色的类似浏览器的图表
莫浅子
2024/05/09
9490
百度智能插件Baidu Comate -让你的VSCODE成为代码编写的得力助手
Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器
写一个简单的函数,此函数用于输出99乘法表 框选代码区域并在Comate输入框中输入/函数注释回车查看具体的函数注释
hacker707
2024/05/08
5370
Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器
Baidu Comate全方位测评结果——全栈工程师的福音
4月末的时候就知道【Baidu Comate智能代码助手】了,一直在测试,毕竟想要全方面的测试内容量还是很多的,今天我以不是很长的篇幅来将【Baidu Comate智能代码助手】的全栈性为大家展示一下,希望能帮助到各位开发者。
红目香薰
2024/05/26
4860
Baidu Comate全方位测评结果——全栈工程师的福音
腾讯云AI代码助手:AI辅助编写测试用例,测试从此不求人
在软件开发过程中,编写测试用例是确保代码质量的重要环节。然而,对于新手编程学习者来说,撰写高质量的测试用例可能是一个巨大的挑战。AI 代码助手作为一个智能编程辅助工具,正是为了解决这一难题而设计的。
Yan-英杰
2024/08/08
1.3K0
腾讯云AI代码助手:AI辅助编写测试用例,测试从此不求人
几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!
自从大模型推出来之后,似乎没有什么工作是大模型不能做的。特别是在文本生成、文案写作、代码提示、代码生成、代码改错等方面都表现出不错的能力。下面我将介绍运用大模型写代码的几种方式,帮助程序员写出更好的代码!(大模型包括但不限于ChatGPT、文心一言【博主测试的大模型】、星火认知大模型等)
墨明棋妙27
2023/08/21
1.3K0
几种技巧让大模型(ChatGPT、文心一言)帮你提高写代码效率!
2025 年实用、全面的 VS Code 插件推荐!
VS Code是一款由微软开源免费、轻量级、功能强大的源代码编辑器。其轻量级体现在基础安装简洁,仅含核心编辑功能。功能强大则源于它支持丰富的语言环境插件拓展,这种模块化设计让VS Code在源代码开发工具中独占鳌头,它能够轻松应对多种语言开发。俗话说的好工欲善其事必先利其器,选用合适的插件能显著提升开发效率。以下是大姚精选的一些实用VS Code插件拓展,希望能对你有所帮助,大家有更好的插件推荐可在文末留言🤞。
追逐时光者
2025/06/08
1.7K0
2025 年实用、全面的 VS Code 插件推荐!
啥?IDEA可以帮我写代码了?
前言--这是一篇关于CodeGeeX的使用测评。在AI时代,还不会使用AI工具助力提升工作效率的,多半会被同事或者领导嫌弃,甚至于被时代所抛弃...........
世玉
2024/04/24
8265
啥?IDEA可以帮我写代码了?
Baidu Comate:智能编码,编程效率的革新者
编程需要时间和精力,但数字时代下的程序员面临着巨大挑战。如何提高效率,释放创造力,成为行业关注的话题。智能代码助手从此出现,帮助我们分析代码,实时监测代码错误,解决性能问题,友好扫描上下代码片段,无需繁琐的手动输入,大幅提升编程效率。
学习起来吧
2024/05/11
3160
Baidu Comate:智能编码,编程效率的革新者
Baidu Comate智能代码助手-高效代码编程体验
代码助手可以快速的帮我们补充代码,修改代码,添加注释,翻译中英文,起变量函数名字等操作,十分的友好,这类代码助手现阶段有较多的产品,比如:
IT从业者张某某
2024/05/07
4240
Baidu Comate智能代码助手-高效代码编程体验
全网首测!三大 AI 编程工具生成 SpringCloud 代码对比
在当下软件开发领域,AI 编程工具正掀起一场革新风暴。对于 Java 开发者而言,构建基于 SpringCloud 的分布式系统是常见任务,而不同 AI 编程工具在这方面的表现大相径庭。此次,我们选取了三款国内颇具代表性的 AI 编程工具 —— 飞算 JavaAI、通义灵码和文心快码,对它们生成 SpringCloud 代码的能力展开全面对比,着重凸显飞算 JavaAI 一键生成工程级代码功能的卓越优势。
努力的阿飞
2025/04/25
3530
全网首测!三大 AI 编程工具生成 SpringCloud 代码对比
百度文心快码发布Comate AI IDE:首创设计稿一键转代码,打造多模态、多智能体协同开发环境
6月23日,在百度AI开放日上,百度智能代码助手“文心快码”迎来重大升级。百度副总裁陈洋正式发布其独立AI原生开发环境工具——Comate AI IDE。这是业界首个深度融合多模态与多智能体协同能力的AI IDE,其革命性的“设计稿一键转代码”(F2C)功能开箱即用,旨在为国内企业和开发者提供高效、智能、安全可靠的开发新体验。目前,百度每日新增代码中,文心快码的生成占比已超过43%。
AI浩
2025/06/24
3101
百度文心快码发布Comate AI IDE:首创设计稿一键转代码,打造多模态、多智能体协同开发环境
百度Comate代码助手全新上线SaaS服务-免费申请试用+深入教程解读
大家好,我是猫头虎博主!在这特殊的1024程序员节,我想与大家分享一个新消息:百度Comate代码助手已经推出了其SaaS版本!这款升级版不仅涵盖了10余项先进的编码功能,更支持超过100种开发语言,并与多种主流编译器完美兼容,旨在为每位开发者和企业提供更优质、更全面的编程体验。现在,就让我们一起深入了解它吧!不再啰嗦,让我们一起揭开它的神秘面纱!
猫头虎
2024/04/09
3590
百度Comate代码助手全新上线SaaS服务-免费申请试用+深入教程解读
Baidu Comate——您的智能编码伙伴
✨Baidu Comate是一款基于文心大模型的智能代码助手,由百度开发并推出。该工具可以帮助开发人员在编写代码的过程中提供智能化的提示和建议,从而提高编码的效率和质量。它结合了百度多年积累的编程现场大数据和外部优秀开源数据,旨在提升编码效率,释放“十倍”软件生产力。
大耳朵土土垚
2024/05/24
3070
Baidu Comate——您的智能编码伙伴
28个SQL常用的DeepSeek提示词指令,小白也能懂!
自从DeepSeek出现后,极大地提升了大家平时的工作效率,特别是对于一些想从事数据行业的小白,只需要掌握DeepSeek的提问技巧,SQL相关的问题也不再是个门槛。
SQL数据库开发
2025/02/26
8522
28个SQL常用的DeepSeek提示词指令,小白也能懂!
Baidu Comate实操测评 暨 线下教学环境实测结果报告
Comate的可实现内容为帮你想、帮你写、帮你改,那么,有这么好的工具,一定要响应一下学校的号召。
红目香薰
2024/05/26
3390
Baidu Comate实操测评 暨 线下教学环境实测结果报告
集智智能课程表项目 实战指南
本项目建立在《Linux高级开发基础》、《Java高级开发基础》、《web高级开发基础》学习的相关知识体系的基础上,以系统全面的应用所学知识为出发点,设计一个学生阶段的学习项目,让学生可以全面应用、巩固、提升阶段的学习内容,在项目实战的过程中将知识体系贯穿起来,融汇贯通,积累项目开发经验,并通过项目检验阶段的学习成果。
看、未来
2020/10/23
7240
ChatGPT+Python+Flask,用最简提示语来开发一个用户信息模糊查询的Web
对于采用ChatGPT,通过自然语言编程进行功能开发是我一直在摸索和尝试的一个事情。在前面也专门验证了包括办公自动化,运维自动化,网页爬虫,视频字幕抓取等各种场景。
人月聊IT
2025/06/24
870
ChatGPT+Python+Flask,用最简提示语来开发一个用户信息模糊查询的Web
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)
用户1170933
2022/05/10
1.5K0
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)
推荐阅读
相关推荐
飞算JavaAI vs 文心快码,面对复杂需求,谁的代码精准度更胜一筹?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验