วิธีตีความพารามิเตอร์ฟังก์ชันเอกสาร API


106

มีมาตรฐานในการตีความไวยากรณ์ของอินเทอร์เฟซฟังก์ชันในเอกสาร API หรือไม่และถ้าใช่จะกำหนดอย่างไร

นี่คือตัวอย่างวิธีการเปลี่ยนสีของรายการคู่มือการเขียนสคริปต์ JavaScript สำหรับ Photoshop สำหรับฟังก์ชัน "fillColor":

fillPath
([fillColor]
[, mode]
[, opacity]
[, preserveTransparency] [, feather]
[, wholePath] [, antiAlias])

ความหมายของเครื่องหมายวงเล็บคืออะไรและเหตุใดจึงมีเครื่องหมายจุลภาคในวงเล็บ สิ่งนี้เกี่ยวข้องกับการเรียกตัวอย่างต่อไปนี้อย่างไร

myPath.fillPath(myNewColor)

myPath.fillPath(mynewColor, {
    mode: RGB,
    opacity: .5
})

4
มีคำแนะนำเบื้องต้นเกี่ยวกับเอกสารอ้างอิง API ที่อธิบายอนุสัญญาวากยสัมพันธ์หรือไม่
Greg Hewgill

35
สำหรับคนที่ปิดโหวต: ฉันเชื่อว่าคำถามนี้มีประโยชน์และจะ "โหวตไม่ปิด" ถ้าทำได้ ไม่ใช่คำถามที่ฉันเคยเห็น (หรือเคยได้ยิน) ถามมาก่อน แต่เป็นการแก้ปัญหาที่เกี่ยวข้องกับการเขียนโปรแกรมที่ถูกต้องและฉันจะพบว่าคำตอบนั้นมีประโยชน์เป็นการส่วนตัวเมื่อฉันสอนคนที่เกี่ยวข้องกับการเขียนโปรแกรม
David Wolever

4
Derek: ฉันคิดว่าคุณพลาดหนึ่งในประโยคที่เป็นตัวหนาในโพสต์ต้นฉบับ หากคุณใช้ "วิธีการอ่านเอกสาร API" ของ Google ข้อมูลในผลการค้นหา 10 รายการแรกจะบอกว่า "นามธรรม" "ไม่สมบูรณ์" "สับสน" เป็นต้นซึ่งจะเป็นการตอกย้ำประเด็นของคำถามของฉัน
dbonneville

2
Greg: ไม่มีการแนะนำผลิตภัณฑ์ Photoshop / Adobe ทั้งหมดนี้มีรูปแบบเดียวกันใน 2 PDF ต่อผลิตภัณฑ์ API อื่น ๆ ที่ฉันคิดจะทำเช่นเดียวกัน มีความรู้โดยนัยที่ฉันในหลาย ๆ กรณีไม่มีและแน่นอนต้องการ
dbonneville

1
ทรัพยากรที่มีประโยชน์คือโปรแกรมดูอ็อบเจ็กต์ที่สร้างไว้ใน Extendscript IDE (กด F1) การคลิกที่วัตถุจะแสดงคุณสมบัติและวิธีการที่มี นอกจากนี้หากใช้วัตถุอื่นเป็นพารามิเตอร์ (โดยปกติ) จะเชื่อมโยงไปยังวัตถุเหล่านั้นเพื่อให้คุณสามารถดูว่ามีคุณสมบัติใดบ้าง มันไม่สมบูรณ์แบบ แต่ช่วยได้
pdizz

คำตอบ:


94

เหตุใดเอกสาร API จึงเขียนในลักษณะที่สร้างความสับสนให้กับมือใหม่ / แฮกเกอร์ / DIYers ยืนต้นเช่นตัวฉันเอง

มันไม่ได้ตั้งใจจะเขียนแบบนั้น ฉันยอมรับว่าดูเหมือนว่าจะไม่มีความสะดวกในการใช้งานในเอกสาร API อย่างไรก็ตามมีการข้ามmanรูปแบบไวยากรณ์แบบเก่าไปจนถึงอนุสัญญา API / เนมสเปซสมัยใหม่มากมาย

โดยปกติแล้วคนประเภทที่ทำงานกับ API จะมีพื้นฐานในการพัฒนาหรืออย่างน้อยก็เป็น 'ผู้ใช้ระดับสูง' ผู้ใช้ประเภทนี้ใช้ในรูปแบบไวยากรณ์ดังกล่าวและเหมาะสมกว่าสำหรับเอกสาร API ที่จะปฏิบัติตามมากกว่าที่จะพยายามสร้างใหม่

มีเอกสารลึกลับที่ไหนสักแห่งที่บอกวิธีอ่านเอกสาร API ของผู้คนหรือไม่

ไม่มีมาตรฐานหรือ RFC supersekretsyntaxdoc วางอยู่ทั่วทุกที่ แต่มีไฟล์อายุประมาณ 30 ปีสำหรับรูปแบบการซิงโครไนซ์ของ UNIX man pageซึ่งใช้กันอย่างแพร่หลาย

ตัวอย่างบางส่วนของสิ่งนี้ (และการตอบคำถามของคุณ) ได้แก่ :

คำที่ขีดเส้นใต้ถือเป็นตัวอักษรและพิมพ์ตามที่ปรากฏ

วงเล็บเหลี่ยม ([]) รอบอาร์กิวเมนต์ระบุว่าอาร์กิวเมนต์เป็นทางเลือก

วงรี ... ใช้เพื่อแสดงว่าอาร์กิวเมนต์ - ต้นแบบก่อนหน้านี้อาจถูกทำซ้ำ

อาร์กิวเมนต์ที่ขึ้นต้นด้วยเครื่องหมายลบมักถูกนำมาใช้เพื่อหมายถึงอาร์กิวเมนต์แฟล็กบางประเภทแม้ว่าจะปรากฏในตำแหน่งที่สามารถแสดงชื่อไฟล์ได้ก็ตาม

เอกสารที่เกี่ยวข้องกับการเขียนโปรแกรมเกือบทั้งหมดใช้รูปแบบไวยากรณ์ประเภทนี้ตั้งแต่Python , man pages , javascript libs ( Highcharts ) เป็นต้น


แยกตัวอย่างของคุณออกจาก Adobe API

fillPath
([fillColor]
[, mode]
[, opacity]
[, preserveTransparency] [, feather]
[, wholePath] [, antiAlias])

เราจะเห็นว่าfillPath()(ฟังก์ชัน) รับอาร์กิวเมนต์ที่เป็นทางเลือกfillColor, mode, opacity, preserveTransparency, feathe, wholePathหรือantiAlias. การโทรfillPath()คุณสามารถส่งผ่านพารามิเตอร์เหล่านั้นไปที่ใดก็ได้จากที่ใดก็ได้ เครื่องหมายจุลภาคภายในตัวเลือก[]หมายความว่าหากใช้พารามิเตอร์นี้นอกเหนือจากพารามิเตอร์อื่น ๆ คุณต้องใช้เครื่องหมายจุลภาคเพื่อแยกออก (บางครั้งสามัญสำนึกแน่นอน แต่บางครั้งบางภาษาเช่น VB จำเป็นต้องใช้เครื่องหมายจุลภาคเหล่านั้นอย่างชัดเจนเพื่อระบุว่าพารามิเตอร์ใดหายไป!) เนื่องจากคุณไม่ได้เชื่อมโยงไปยังเอกสารประกอบ (และหาไม่พบในหน้าสคริปต์ของ Adobe ) จึงไม่มีวิธีใดที่จะทราบได้ว่า Adobe API ต้องการรูปแบบใด อย่างไรก็ตามควรมีคำอธิบายที่ด้านบนของเอกสารส่วนใหญ่อธิบายอนุสัญญาที่ใช้ภายใน

ดังนั้นฟังก์ชันนี้อาจใช้ได้หลายวิธี:

fillPath() //Nothing passed
fillPath(#000000,RGB) // Black, in RGB mode
fillPath(#000000,RGB,50) // Black, in RGB mode, half opacity

//Now it gets tricky, this might ALSO be acceptable:
fillPath(#000000,50) // Black, no mode, half opacity

//OR
fillPath(#000000,,50) // Black, no mode, half opacity

อีกครั้งมักจะมีมาตรฐานบางอย่างในเอกสารทั้งหมดที่เกี่ยวข้องกับ API / การเขียนโปรแกรม อย่างไรก็ตามในแต่ละเอกสารอาจมีความแตกต่างเล็กน้อย ในฐานะผู้ใช้ระดับสูงหรือนักพัฒนาคุณคาดว่าจะสามารถอ่านและทำความเข้าใจเอกสาร / เฟรมเวิร์ก / ไลบรารีที่คุณพยายามใช้


5
ลิงค์รูปแบบเรื่องย่อของ UNIX man page ตายแล้วใครมีลิงค์ทดแทนไหม @PenguinCoder Update: อ้างอิงจาก [ unix.stackexchange.com/questions/17833/… (Unix Stack Exchange) มันขึ้นอยู่กับ [ en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form (EBNF)
steviejay

มีสำเนาที่เก็บถาวรของรูปแบบการซิงโครไนซ์
CodeManX

6

เอกสาร API สำหรับภาษาที่พิมพ์แบบไดนามิกอาจไม่มีความหมายมากนักหากไม่ได้เขียนอย่างระมัดระวังดังนั้นอย่ารู้สึกแย่กับมันแม้แต่นักพัฒนาที่มีประสบการณ์มากที่สุดก็อาจมีปัญหาในการพยายามทำความเข้าใจ

เกี่ยวกับวงเล็บและเช่นนี้มักจะมีส่วนการประชุมโค้ดที่ควรอธิบายการใช้งานที่แน่นอนนอกตัวอย่างตามตัวอักษร แม้ว่าEBNF , RegexและRailroad Diagramsจะแพร่หลายเกือบทั่วไปดังนั้นคุณควรทำความคุ้นเคยกับสิ่งเหล่านี้เพื่อทำความเข้าใจสัญกรณ์ส่วนใหญ่


3

วงเล็บหมายความว่าคุณสมบัติเป็นทางเลือก โปรดทราบว่าหากคุณต้องการตั้งค่าคุณสมบัติบางอย่างที่อันดับ nTh คุณต้องประกาศคุณสมบัติสำหรับคุณสมบัตินำหน้าหรือประกาศเป็นไม่ได้กำหนด:

fillPath() //good
fillPath ( someFillColor ) //good
fillPath ( someFillColor, mode ) //good
fillPath ( undefined, mode ) //good
fillPath ( mode ) //bad
fillPath ( undefined ) //really bad

2
fillPath (mode)อาจจะโอเค หากอาร์กิวเมนต์ที่เป็นทางเลือกมาก่อนอาร์กิวเมนต์ที่ไม่เป็นทางเลือกมักหมายความว่าฟังก์ชันนั้นฉลาดพอที่จะตรวจจับได้ว่ามีการระบุอาร์กิวเมนต์ที่เป็นทางเลือกหรือไม่ (เช่นโดยดูจากประเภทของมัน)
ThiefMaster

1
MMmm ดีที่เป็นไปได้ แต่ฉันชอบที่จะพึ่งพาสิ่งที่แข็งแกร่งมากกว่าสิ่งที่สคริปต์อาจทำให้ฉัน: D
Loic Aigon

1

ฉันมีคำถามนี้เหมือนกันในขณะที่กลับมาและใครบางคนชี้ให้ฉันเพื่อขยายคัส-Naur แบบฟอร์ม

มันสมเหตุสมผลเพราะการเขียนโปรแกรมสามารถใช้เพื่อสร้างผลลัพธ์ที่ไร้ขีด จำกัด ได้ เอกสารประกอบไม่สามารถแสดงตัวอย่างสำหรับทุกกรณีที่เป็นไปได้ ตัวอย่างที่ดีของการใช้งานทั่วไปฉันมีประโยชน์ แต่เมื่อคุณอ่านไวยากรณ์พื้นฐานได้แล้วคุณจะสามารถสร้างโค้ดของคุณเองได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.