# Why do some \`system\` functions take keyword args and some don't?

**URL:** <https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764>\
**Category:** Ignition\
**Created:** [July 24, 2023, 5:20am UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764 "2023-07-24T05:20:47Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [July 24, 2023, 5:20am UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/1 "2023-07-24T05:20:47Z")

</div>

Question in the title. E.g. `system.dataset.sort` doesn't take keyword args, but most do. Just wondering the reason most do but some don't? I like providing keyword args since it both:

- makes it easier to read later on, especially if you're using a function you don't normally use
- increases chances of backwards compatibility in case function arg definitions change (e.g. new args are added into existing arg indices) - this one should probably very rarely happen, but it's a possibility

---

<div class="post-metadata">

**Author:** ![justinedwards.jle](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/justinedwards.jle/32/37854_2.png) [@justinedwards.jle](https://forum.inductiveautomation.com/u/justinedwards.jle)\
**Post date:** [July 24, 2023, 5:35am UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/2 "2023-07-24T05:35:24Z")

</div>

> [@nminchin](#):
>
> `system.dataset.sort` doesn't take keyword args

You mean :

> system.gui.transform( **component=event.source** , [...])  
> vs  
> system.dataset.sort( **event.source.data** , [...])

You're asking why you can't explicitly say:

> system.dataset.sort( **dataset=event.source.data** , [...])?

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [July 24, 2023, 5:36am UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/3 "2023-07-24T05:36:35Z")

</div>

Correct

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [July 24, 2023, 9:22am UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/4 "2023-07-24T09:22:15Z")

</div>

Pure chance on whomever originally implemented the function, until IA made it an internal best practice to support them. Most of the newer stuff supports them.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [July 24, 2023, 3:48pm UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/5 "2023-07-24T15:48:59Z")

</div>

Yeah. On _our_ side, implementing with keyword args takes slightly more effort and means slightly more complicated unit testing. It's definitely my preference for all first party functions, though.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [July 24, 2023, 3:53pm UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/6 "2023-07-24T15:53:09Z")

</div>

I only use them when there's a mix of required and optional parameters, and even then sparingly.

They're a bit of a footgun in some cases, and can lead to mistakes and confusion like [this](https://forum.inductiveautomation.com/t/rest-api-system-net-httpclient-post-errors-415-400/76744/2) if you don't name every parameter in your calls and instead fall back to the implicit ordering.

---

<div class="post-metadata">

**Author:** ![jacque\_trahan](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jacque_trahan/32/58886_2.png) [@jacque\_trahan](https://forum.inductiveautomation.com/u/jacque_trahan)\
**Post date:** [February 21, 2024, 9:20pm UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/7 "2024-02-21T21:20:57Z")

</div>

Ah just came across this as well. Will this be a feature or at least removed from the [documentation](https://www.docs.inductiveautomation.com/docs/8.1/appendix/scripting-functions/system-dataset/system-dataset-sort) if we can not use it?

Code works if i do not have the key word "naturalOrdering":

```auto
sortedDataSet = system.dataset.sort(updatedDataset, 0, naturalOrdering=True)

```

error:

```auto
com.inductiveautomation.ignition.common.script.JythonExecException
Traceback (most recent call last):
  File "<function:runAction>", line 6, in runAction
  File "<module:screen.tools>", line 1203, in getTagAddDataSetHeadersValuesToTag
TypeError: sort(): takes no keyword arguments

	caused by org.python.core.PyException
Traceback (most recent call last):
  File "<function:runAction>", line 6, in runAction
  File "<module:screen.tools>", line 1203, in getTagAddDataSetHeadersValuesToTag
TypeError: sort(): takes no keyword arguments

Ignition v8.1.36 (b2024010211)
Java: Azul Systems, Inc. 17.0.8

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [February 21, 2024, 9:26pm UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/8 "2024-02-21T21:26:05Z")

</div>

You **can** use it. You just cannot use a keyword to supply it. If you look carefully at the docs, you will see `ascending` and `naturalOrdering` **together** in a single set of brackets. That tells me they are a pair, supply neither or both, but not just one.

When keyword arguments **are** supported, the docs **say so**.

---

<div class="post-metadata">

**Author:** ![jacque\_trahan](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jacque_trahan/32/58886_2.png) [@jacque\_trahan](https://forum.inductiveautomation.com/u/jacque_trahan)\
**Post date:** [February 21, 2024, 9:38pm UTC](https://forum.inductiveautomation.com/t/why-do-some-system-functions-take-keyword-args-and-some-dont/76764/9 "2024-02-21T21:38:50Z")

</div>

Ohhh ok, I did not realize ignition made us do that. I was looking at it like python functions where we do not have to call them all was my mistake. That makes sense hank you!
